Oberdan Parodi

43 papers B 1C 4Misc 2Journal 19Unranked 17
YearRankTypeTitle / Venue / Authors
2021 J jnl
Comput. Methods Programs Biomed.
Tijana Djukic, Igor Saveljic, Gualtiero Pelosi, Oberdan Parodi, Nenad Filipovic
2019 Misc conf
OZCHI
Marina Buzzi, Franca Giugni, Oberdan Parodi, Beatrice Rapisarda, Federico Vozzi
2019 J jnl
Comput. Methods Programs Biomed.
Tijana Djukic, Igor Saveljic, Gualtiero Pelosi, Oberdan Parodi, Nenad Filipovic
2019 C conf
BIBE
Tijana Djukic, Igor Saveljic, Gualtiero Pelosi, Oberdan Parodi, Nenad Filipovic
2018 J jnl
Biomed. Signal Process. Control.
Vassiliki Kigka, George Rigas, Antonis I. Sakellarios, Panagiotis K. Siogkas, Ioannis O. Andrikos, Themis P. Exarchos, Dimitra Loggitsi, Constantinos D. Anagnostopoulos, Lampros K. Michalis, Danilo Neglia, Gualtiero Pelosi, Oberdan Parodi, Dimitrios I. Fotiadis
2018 conf
EMBC
Antonis I. Sakellarios, Panagiotis K. Siogkas, Eleni I. Georga, Nikolaos S. Tachos, Vassiliki Kigka, Panagiota Tsompou, Ioannis O. Andrikos, Georgia S. Karanasiou, Silvia Rocchiccioli, Joao Correia, Gualtiero Pelosi, Paolo Stofella, Nenad Filipovic, Oberdan Parodi, Dimitrios I. Fotiadis
2018 conf
EMBC
Vassiliki I. Kigka, Eleni I. Georga, Antonis I. Sakellarios, Nikolaos S. Tachos, Ioannis O. Andrikos, Panagiota Tsompou, Silvia Rocchiccioli, Gualtiero Pelosi, Oberdan Parodi, Lampros K. Michalis, Dimitrios I. Fotiadis
2017 J jnl
Eng. Appl. Artif. Intell.
Davide Bacciu, Stefano Chessa, Claudio Gallicchio, Alessio Micheli, Luca Pedrelli, Erina Ferro, Luigi Fortunati, Davide La Rosa, Filippo Palumbo, Federico Vozzi, Oberdan Parodi
2017 conf
EMBC
Panagiotis K. Siogkas, George Rigas, Themis P. Exarchos, Antonis I. Sakellarios, Michail I. Papafaklis, Gualtiero Pelosi, Oberdan Parodi, Lampros K. Michalis, Dimitrios I. Fotiadis
2017 C conf
BIBE
Velibor Isailovic, Zarko Milosevic, Dalibor Nikolic, Igor Saveljic, Milica M. Nikolic, Marija Gacic, Bojana R. Cirkovic-Andjelkovic, Themis P. Exarchos, Dimitrios I. Fotiadis, Gualtiero Pelosi, Oberdan Parodi, Nenad Filipovic
2017 J jnl
IEEE Trans. Biomed. Eng.
Antonis I. Sakellarios, Lorenz Räber, Christos V. Bourantas, Themis P. Exarchos, Lambros S. Athanasiou, Gualtiero Pelosi, Konstantinos C. Koskinas, Oberdan Parodi, Katerina K. Naka, Lampros K. Michalis, Patrick W. Serruys, Hector M. Garcia-Garcia, Stephan Windecker, Dimitrios I. Fotiadis
2017 conf
FABULOUS
Bojana R. Andjelkovic Cirkovic, Velibor Isailovic, Dalibor Nikolic, Igor Saveljic, Oberdan Parodi, Nenad Filipovic
2017 J jnl
J. Reliab. Intell. Environ.
Filippo Palumbo, Davide La Rosa, Erina Ferro, Davide Bacciu, Claudio Gallicchio, Alessio Micheli, Stefano Chessa, Federico Vozzi, Oberdan Parodi
2017 conf
EMBC
Antonis I. Sakellarios, George Rigas, Vassiliki Kigka, Panagiotis K. Siogkas, Panagiota Tsompou, Georgia S. Karanasiou, Themis P. Exarchos, Ioannis O. Andrikos, Nikolaos S. Tachos, Gualtiero Pelosi, Oberdan Parodi, Dimitrios I. Fotiadis
2016 B conf
Intelligent Environments
Davide Bacciu, Stefano Chessa, Erina Ferro, Luigi Fortunati, Claudio Gallicchio, Davide La Rosa, Miguel Llorente, Alessio Micheli, Filippo Palumbo, Oberdan Parodi, Andrea Valenti, Federico Vozzi
2016 J jnl
BMC Medical Imaging
Lambros S. Athanasiou, George Rigas, Antonis I. Sakellarios, Themis P. Exarchos, Panagiotis K. Siogkas, Christos V. Bourantas, Hector M. Garcia-Garcia, Pedro A. Lemos, Breno A. Falcao, Lampros K. Michalis, Oberdan Parodi, Federico Vozzi, Dimitrios I. Fotiadis
2015 J jnl
IEEE J. Biomed. Health Informatics
Konstantinos P. Exarchos, Clara Carpegianni, Georgios Rigas, Themis P. Exarchos, Federico Vozzi, Antonis I. Sakellarios, Paolo Marraccini, Katerina K. Naka, Lampros K. Michalis, Oberdan Parodi, Dimitrios I. Fotiadis
2015 conf
AALTD@PKDD/ECML (Revised Selected Papers)
Claudio Gallicchio, Alessio Micheli, Luca Pedrelli, Luigi Fortunati, Federico Vozzi, Oberdan Parodi
2015 C conf
BIBE
Milos D. Radovic, Velibor Isailovic, Igor Saveljic, Zarko Milosevic, Dalibor Nikolic, Themis P. Exarchos, Dimitrios I. Fotiadis, Oberdan Parodi, Nenad Filipovic
2015 J jnl
Comput. Biol. Medicine
Lambros S. Athanasiou, George A. Rigas, Antonis I. Sakellarios, Themis P. Exarchos, Panagiotis K. Siogkas, Katerina K. Naka, Daniele Panetta, Gualtiero Pelosi, Federico Vozzi, Lampros K. Michalis, Oberdan Parodi, Dimitrios I. Fotiadis
2015 J jnl
Comput. Methods Programs Biomed.
Lambros S. Athanasiou, George Rigas, Antonis I. Sakellarios, Christos V. Bourantas, Kostas A. Stefanou, Evangelos Fotiou, Themis P. Exarchos, Panagiotis K. Siogkas, Katerina K. Naka, Oberdan Parodi, Federico Vozzi, Zhongzhao Teng, Victoria E. L. Young, Jonathan Gillard, Francesco Prati, Lampros K. Michalis, Dimitrios I. Fotiadis
2015 conf
AALTD@PKDD/ECML
Claudio Gallicchio, Alessio Micheli, Luca Pedrelli, Federico Vozzi, Oberdan Parodi
2015 Misc conf
EPIA
Davide Bacciu, Stefano Chessa, Claudio Gallicchio, Alessio Micheli, Erina Ferro, Luigi Fortunati, Filippo Palumbo, Oberdan Parodi, Federico Vozzi, Sten Hanke, Johannes Kropf, Karl Kreiner
2015 conf
EMBC
Lambros S. Athanasiou, George A. Rigas, Antonios I. Sakellarios, Themis P. Exarchos, Panagiotis K. Siogkas, Lampros K. Michalis, Oberdan Parodi, Federico Vozzi, Dimitrios I. Fotiadis
2015 conf
EMBC
Panagiotis K. Siogkas, Lambros S. Athanasiou, Antonis I. Sakellarios, Kostas A. Stefanou, Themis P. Exarchos, Michail I. Papafaklis, Katerina K. Naka, Oberdan Parodi, Lampros K. Michalis, Dimitrios I. Fotiadis
2014 conf
EMBC
George A. Rigas, Lambros S. Athanasiou, Antonios I. Sakellarios, Themis P. Exarchos, Panagiotis K. Siogkas, Katerina K. Naka, Daniele Panetta, Gualtiero Pelosi, Lampros K. Michalis, Oberdan Parodi, Dimitrios I. Fotiadis
2013 conf
EMBC
Panagiotis K. Siogkas, Michail I. Papafaklis, Antonis I. Sakellarios, Kostas A. Stefanou, Christos V. Bourantas, Lambros M. Athanasiou, Christos V. Bellos, Themis P. Exarchos, Katerina K. Naka, Lampros K. Michalis, Oberdan Parodi, Dimitrios I. Fotiadis
2013 J jnl
Medical Biol. Eng. Comput.
Nenad Filipovic, Zhongzhao Teng, Milos D. Radovic, Igor Saveljic, Dimitrios I. Fotiadis, Oberdan Parodi
2013 C conf
BIBE
Antonis I. Sakellarios, Panagiotis K. Siogkas, Lambros S. Athanasiou, Themis P. Exarchos, Michail I. Papafaklis, Christos V. Bourantas, Katerina K. Naka, Dimitra Iliopoulou, Lampros K. Michalis, Nenad Filipovic, Oberdan Parodi, Dimitrios I. Fotiadis
2013 conf
EMBC
Konstantinos P. Exarchos, Themis P. Exarchos, Christos V. Bourantas, Michail I. Papafaklis, Katerina K. Naka, Lampros K. Michalis, Oberdan Parodi, Dimitrios I. Fotiadis
2013 conf
EMBC
Antonis I. Sakellarios, Panagiotis K. Siogkas, Lambros S. Athanasiou, Themis P. Exarchos, Michail I. Papafaklis, Christos V. Bourantas, Katerina K. Naka, Lampros K. Michalis, Nenad Filipovic, Oberdan Parodi, Dimitrios I. Fotiadis
2012 J jnl
IEEE Trans. Inf. Technol. Biomed.
Nenad Filipovic, Mirko Rosic, Irena Tanaskovic, Zarko Milosevic, Dalibor Nikolic, Nebojsa Zdravkovic, Aleksandar Peulic, Milos Kojic, Dimitrios I. Fotiadis, Oberdan Parodi
2012 J jnl
IEEE Trans. Inf. Technol. Biomed.
Craig J. Hartley, Morteza Naghavi, Oberdan Parodi, Constantinos S. Pattichis, Carmen C. Y. Poon, Yuan-Ting Zhang
2012 conf
EMBC
Themis P. Exarchos, Antonis I. Sakellarios, Panagiotis K. Siogkas, Dimitrios I. Fotiadis, Zarko Milosevic, Dalibor Nikolic, Nenad Filipovic, Paolo Marraccini, Federico Vozzi, Oberdan Parodi
2012 J jnl
IEEE Trans. Inf. Technol. Biomed.
Oberdan Parodi, Themis P. Exarchos, Paolo Marraccini, Federico Vozzi, Zarko Milosevic, Dalibor Nikolic, Antonis I. Sakellarios, Panagiotis K. Siogkas, Dimitrios I. Fotiadis, Nenad Filipovic
2011 conf
EMBC
Nenad Filipovic, Mirko Rosic, Irena Tanaskovic, Oberdan Parodi, Dimitris I. Fotiadis
2011 J jnl
IEEE Trans. Biomed. Eng.
Panagiotis K. Siogkas, Antonis I. Sakellarios, Themis P. Exarchos, Lambros S. Athanasiou, Evaggelos Karvounis, Kostas A. Stefanou, Evangelos Fotiou, Dimitrios I. Fotiadis, Katerina K. Naka, Lampros K. Michalis, Nenad Filipovic, Oberdan Parodi
2011 conf
EMBC
Themis P. Exarchos, Yorgos Goletsis, Kostas A. Stefanou, Evangelos Fotiou, Dimitrios I. Fotiadis, Oberdan Parodi
2010 J jnl
IEEE Trans. Biomed. Eng.
Raffaele Ponzini, Christian Vergara, Giovanna Rizzo, Alessandro Veneziani, Alberto Roghi, Angelo Vanzulli, Oberdan Parodi, Alberto Redaelli
2010 J jnl
Comput. Methods Programs Biomed.
Christian Vergara, Raffaele Ponzini, Alessandro Veneziani, Alberto Redaelli, Danilo Neglia, Oberdan Parodi
1998 J jnl
IEEE Trans. Biomed. Eng.
Alessandra Bertoldo, Paolo Vicini, Gianmario Sambuceti, Adriaan A. Lammertsma, Oberdan Parodi, Claudio Cobelli
1997 conf
HPCN Europe
Maria Filomena Santarelli, Vincenzo Positano, Luigi Landini, Oberdan Parodi, Thomas Serafini
1996 J jnl
Biol. Cybern.
Oberdan Parodi, P. Combe, J.-C. Ducom
redb/extractors/elf_extractors/elf_symbols.py
← Index redb/extractors/elf_extractors/elf_symbols.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Dict

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFSymbol


class ELFSymbolExtractor(ELFExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        elf=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            elf,
        )
        self.elf_symbols = []
        self.elastic_index = self.index_prefix + "-elf_symbols"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _map_symbol_type(self, st_type_str: str) -> int:
        """Map symbol type string to enum value."""
        type_map = {
            'STT_NOTYPE': 0,
            'STT_OBJECT': 1,
            'STT_FUNC': 2,
            'STT_SECTION': 3,
            'STT_FILE': 4,
            'STT_COMMON': 5,
            'STT_TLS': 6
        }
        return type_map.get(st_type_str, 0)

    def _map_symbol_bind(self, st_bind_str: str) -> int:
        """Map symbol binding string to enum value."""
        bind_map = {
            'STB_LOCAL': 0,
            'STB_GLOBAL': 1,
            'STB_WEAK': 2
        }
        return bind_map.get(st_bind_str, 0)

    def _map_symbol_visibility(self, st_vis_str: str) -> int:
        """Map symbol visibility string to enum value."""
        vis_map = {
            'STV_DEFAULT': 0,
            'STV_INTERNAL': 1,
            'STV_HIDDEN': 2,
            'STV_PROTECTED': 3
        }
        return vis_map.get(st_vis_str, 0)

    def _extract_symbol_data(self, symbol, is_dynamic: bool = False) -> Dict:
        """Extract data from a single symbol."""
        try:
            # Get symbol name (handle empty names)
            symbol_name = symbol.name if symbol.name else f"<unnamed_{symbol.entry.get('st_name', 0)}>"

            # Get symbol properties
            symbol_value = symbol.entry.get('st_value', 0)
            symbol_size = symbol.entry.get('st_size', 0)

            # Handle section index - can be integer or special string like 'SHN_UNDEF'
            st_shndx_raw = symbol.entry.get('st_shndx', 0)
            if isinstance(st_shndx_raw, str):
                # Map special section index strings to integers
                shndx_map = {
                    'SHN_UNDEF': 0,
                    'SHN_ABS': 65521,  # 0xFFF1
                    'SHN_COMMON': 65522,  # 0xFFF2
                    'SHN_XINDEX': 65535,  # 0xFFFF
                }
                symbol_section_index = shndx_map.get(st_shndx_raw, 0)
                symbol_section_index_str = st_shndx_raw.replace('SHN_', '') if st_shndx_raw.startswith('SHN_') else st_shndx_raw
            else:
                symbol_section_index = st_shndx_raw
                symbol_section_index_str = str(st_shndx_raw)

            # Get symbol type and map to enum
            st_type_str = symbol.entry.get('st_info', {}).get('type', 'STT_NOTYPE')
            symbol_type_enum = self._map_symbol_type(st_type_str)
            symbol_type_str = st_type_str.replace('STT_', '') if st_type_str.startswith('STT_') else st_type_str

            # Get symbol binding and map to enum
            st_bind_str = symbol.entry.get('st_info', {}).get('bind', 'STB_LOCAL')
            symbol_bind_enum = self._map_symbol_bind(st_bind_str)
            symbol_bind_str = st_bind_str.replace('STB_', '') if st_bind_str.startswith('STB_') else st_bind_str

            # Get symbol visibility and map to enum
            st_vis_str = symbol.entry.get('st_other', {}).get('visibility', 'STV_DEFAULT')
            symbol_visibility_enum = self._map_symbol_visibility(st_vis_str)
            symbol_visibility_str = st_vis_str.replace('STV_', '') if st_vis_str.startswith('STV_') else st_vis_str

            return ELFSymbol(
                symbol_name=symbol_name,
                symbol_value=symbol_value,
                symbol_size=symbol_size,
                symbol_type=symbol_type_enum,
                symbol_type_str=symbol_type_str,
                symbol_bind=symbol_bind_enum,
                symbol_bind_str=symbol_bind_str,
                symbol_visibility=symbol_visibility_enum,
                symbol_visibility_str=symbol_visibility_str,
                symbol_section_index=symbol_section_index,
                symbol_section_index_str=symbol_section_index_str,
                is_dynamic=1 if is_dynamic else 0
            )

        except Exception as e:
            self.log.error(f"Error extracting symbol data: {e}")
            return None

    def _extract_symbols_from_section(self, elf, section_name: str, is_dynamic: bool = False) -> List[Dict]:
        """Extract symbols from a specific symbol table section."""
        symbols = []

        try:
            section = elf.get_section_by_name(section_name)
            if not section:
                self.log.debug(f"No {section_name} section found")
                return symbols

            if not hasattr(section, 'iter_symbols'):
                self.log.debug(f"Section {section_name} is not a symbol table")
                return symbols

            # Iterate through symbols in the section with per-symbol error handling
            for symbol_index, symbol in enumerate(section.iter_symbols()):
                try:
                    symbol_data = self._extract_symbol_data(symbol, is_dynamic)
                    if symbol_data:
                        symbols.append(symbol_data)
                except Exception as e:
                    self.log.warning(f"Error processing symbol {symbol_index} in {section_name}: {e}")
                    # Continue with other symbols

        except Exception as e:
            self.log.error(f"Error extracting symbols from {section_name}: {e}")

        return symbols

    def tag(self):
        return Tag.ELF_SYMBOLS.value if hasattr(Tag, 'ELF_SYMBOLS') else "elf_symbols"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_data(elf):
                all_symbols = []

                # Extract static symbols from .symtab with individual error handling
                try:
                    static_symbols = self._extract_symbols_from_section(elf, '.symtab', is_dynamic=False)
                    all_symbols.extend(static_symbols)
                    self.log.debug(f"Extracted {len(static_symbols)} static symbols from .symtab")
                except Exception as e:
                    self.log.warning(f"Error extracting static symbols from .symtab: {e}")

                # Extract dynamic symbols from .dynsym with individual error handling
                try:
                    dynamic_symbols = self._extract_symbols_from_section(elf, '.dynsym', is_dynamic=True)
                    all_symbols.extend(dynamic_symbols)
                    self.log.debug(f"Extracted {len(dynamic_symbols)} dynamic symbols from .dynsym")
                except Exception as e:
                    self.log.warning(f"Error extracting dynamic symbols from .dynsym: {e}")

                return all_symbols

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_symbols = result
            return self.elf_symbols

        except Exception as e:
            self.log.error(f"Error extracting ELF symbols {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_symbols
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no symbols (e.g., stripped binary)
                # None is reserved for actual errors

                # Prepare data arrays for all symbols
                data = []
                current_time = datetime.now(timezone.utc)
                for symbol in self.elf_symbols:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        symbol.symbol_name,
                        symbol.symbol_value,
                        symbol.symbol_size,
                        symbol.symbol_type,
                        symbol.symbol_type_str,
                        symbol.symbol_bind,
                        symbol.symbol_bind_str,
                        symbol.symbol_visibility,
                        symbol.symbol_visibility_str,
                        symbol.symbol_section_index,
                        symbol.symbol_section_index_str,
                        symbol.is_dynamic,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'symbol_name', 'symbol_value', 'symbol_size',
                    'symbol_type', 'symbol_type_str',
                    'symbol_bind', 'symbol_bind_str',
                    'symbol_visibility', 'symbol_visibility_str',
                    'symbol_section_index', 'symbol_section_index_str', 'is_dynamic',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)', 'UInt64', 'UInt64',
                    "Enum8('NOTYPE'=0, 'OBJECT'=1, 'FUNC'=2, 'SECTION'=3, 'FILE'=4, 'COMMON'=5, 'TLS'=6)",
                    'LowCardinality(String)',
                    "Enum8('LOCAL'=0, 'GLOBAL'=1, 'WEAK'=2)",
                    'LowCardinality(String)',
                    "Enum8('DEFAULT'=0, 'INTERNAL'=1, 'HIDDEN'=2, 'PROTECTED'=3)",
                    'LowCardinality(String)',
                    'UInt16', 'LowCardinality(String)', 'UInt8',
                    'DateTime64(3, \'UTC\')'
                ]

                if not data:
                    return None

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

    def get_clickhouse_table(self) -> str:
        return "redb_elf_symbols"