Ilaria Catapano

59 papers C 4Journal 50Unranked 5
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Giuseppe Esposito, Gianluca Gennarelli, Giovanni Ludeno, Alan Salari, Danilo Erricolo, Francesco Soldovieri, Ilaria Catapano
2025 conf
ICCSA (Workshops 14)
Francesco Mercogliano, Andrea Barone, Giuseppe Esposito, Filippo Accomando, Andrea Vitale, Gianluca Gennarelli, Raffaele Castaldo, Pietro Tizzani, Ilaria Catapano
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Giuseppe Esposito, Ilaria Catapano, Giovanni Ludeno, Francesco Soldovieri, Gianluca Gennarelli
2024 J jnl
Sensors
Amedeo Capozzoli, Ilaria Catapano, Eliana Cinotti, Claudio Curcio, Giuseppe Esposito, Gianluca Gennarelli, Angelo Liseno, Giovanni Ludeno, Francesco Soldovieri
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Giuseppe Esposito, Gianluca Gennarelli, Francesco Soldovieri, Ilaria Catapano
2024 J jnl
Sensors
Raffaele Persico, Ilaria Catapano, Giuseppe Esposito, Gianfranco Morelli, Gregory De Martino, Luigi Capozzoli
2024 J jnl
Remote. Sens.
Carlo Noviello, Salvatore Maresca, Gianluca Gennarelli, Antonio Malacarne, Filippo Scotti, Paolo Ghelfi, Francesco Soldovieri, Ilaria Catapano, Rosa Scapaticci
2024 J jnl
Remote. Sens.
Mehdi Masoodi, Gianluca Gennarelli, Francesco Soldovieri, Ilaria Catapano
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Ilaria Catapano, Gianluca Gennarelli, Giuseppe Esposito, Giovanni Ludeno, Yan Su, Zongyu Zhang, Francesco Soldovieri
2023 J jnl
Remote. Sens.
Luca Piroddi, Nasser Abu Zeid, Sergio Vincenzo Calcina, Patrizia Capizzi, Luigi Capozzoli, Ilaria Catapano, Marilena Cozzolino, Sebastiano D'Amico, Rosa Lasaponara, Deodato Tapete
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Giovanni Ludeno, Ilaria Catapano, Francesco Soldovieri, Gianluca Gennarelli
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Gianluca Gennarelli, Carlo Noviello, Giovanni Ludeno, Giuseppe Esposito, Francesco Soldovieri, Ilaria Catapano
2022 J jnl
IEEE Access
Gianluca Gennarelli, Carlo Noviello, Giovanni Ludeno, Giuseppe Esposito, Francesco Soldovieri, Ilaria Catapano
2022 J jnl
Remote. Sens.
Carlo Noviello, Gianluca Gennarelli, Giuseppe Esposito, Giovanni Ludeno, Giancarmine Fasano, Luigi Capozzoli, Francesco Soldovieri, Ilaria Catapano
2022 J jnl
IEEE Trans. Biomed. Eng.
Matteo Bruno Lodi, Nicola Curreli, Sonia Zappia, Luca Pilia, Maria Francesca Casula, Sergio Fiorito, Ilaria Catapano, Francesco Desogus, Teresa Pellegrino, Ilka Kriegel, Lorenzo Crocco, Giuseppe Mazzarella, Alessandro Fanti
2022 J jnl
IEEE Geosci. Remote. Sens. Lett.
Carlo Noviello, Giuseppe Esposito, Ilaria Catapano, Francesco Soldovieri
2022 conf
ICCSA (Workshops 6)
Luca Piroddi, Ilaria Catapano, Emanuele Colica, Sebastiano D'Amico, Luciano Galone, Gianfranco Gargiulo, Stefano Sfarra
2022 J jnl
Remote. Sens.
Gianluca Gennarelli, Giovanni Ludeno, Carlo Noviello, Ilaria Catapano, Francesco Soldovieri
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Fabio Tosti, Gianluca Gennarelli, Livia Lantini, Ilaria Catapano, Francesco Soldovieri, Iraklis Giannakis, Amir M. Alani
2021 J jnl
IEEE Trans. Geosci. Remote. Sens.
Gianluca Gennarelli, Ilaria Catapano, Xavier Dérobert, Francesco Soldovieri
2021 J jnl
Remote. Sens.
Ilaria Catapano, Carlo Noviello, Francesco Soldovieri
2021 J jnl
Inf.
Emanuele Colica, Antonella Antonazzo, Rita Auriemma, Luigi Coluccia, Ilaria Catapano, Giovanni Ludeno, Sebastiano D'Amico, Raffaele Persico
2020 J jnl
IEEE Trans. Geosci. Remote. Sens.
Giovanni Ludeno, Gianluca Gennarelli, Sébastien Lambot, Francesco Soldovieri, Ilaria Catapano
2020 conf
TSP
Fabio Tosti, Gianluca Gennarelli, Livia Lantini, Ilaria Catapano, Lilong Zou, Francesco Soldovieri, Amir M. Alani
2020 conf
TSP
Ilaria Catapano, Gianluca Gennarelli, Giovanni Ludeno, Luigi Capozzoli, Francesco Soldovieri
2020 J jnl
IEEE Trans. Geosci. Remote. Sens.
Gianluca Gennarelli, Giovanni Ludeno, Ilaria Catapano, Francesco Soldovieri
2020 J jnl
Remote. Sens.
Jessica Bellanova, Giuseppe Calamita, Ilaria Catapano, Alessandro Ciucci, Carmela Cornacchia, Gianluca Gennarelli, Alessandro Giocoli, Federico Fisangher, Giovanni Ludeno, Gianfranco Morelli, Angela Perrone, Sabatino Piscitelli, Francesco Soldovieri, Vincenzo Lapenna
2020 J jnl
Remote. Sens.
Ilaria Catapano, Gianluca Gennarelli, Giovanni Ludeno, Carlo Noviello, Giuseppe Esposito, Alfredo Renga, Giancarmine Fasano, Francesco Soldovieri
2020 J jnl
Remote. Sens.
Carlo Noviello, Giuseppe Esposito, Giancarmine Fasano, Alfredo Renga, Francesco Soldovieri, Ilaria Catapano
2020 J jnl
Remote. Sens.
Luigi Capozzoli, Ilaria Catapano, Gregory De Martino, Gianluca Gennarelli, Giovanni Ludeno, Enzo Rizzo, Francesco Soldovieri, Francesco Uliano Scelza, Gabriel Zuchtriegel
2019 J jnl
IEEE Signal Process. Mag.
Ilaria Catapano, Gianluca Gennarelli, Giovanni Ludeno, Francesco Soldovieri
2019 conf
MetroInd4.0&IoT
Orsola Petrella, Monica Ciminello, Adolfo Martucci, Ilaria Catapano, Giovanni Ludeno, Francesco Soldovieri
2019 J jnl
Remote. Sens.
Stefano Perna, Giovanni Alberti, Paolo Berardino, Lorenzo Bruzzone, Dario Califano, Ilaria Catapano, Luca Ciofaniello, Elena Donini, Carmen Esposito, Claudia Facchinetti, Roberto Formaro, Gianluca Gennarelli, Christopher Gerekos, Riccardo Lanari, Francesco Longo, Giovanni Ludeno, Mauro Mariotti d'Alessandro, Antonio Natale, Carlo Noviello, Gianfranco Palmese, Claudio Papa, Giulia Pica, Fabio Rocca, Giuseppe Salzillo, Francesco Soldovieri, Stefano Tebaldini, Sanchari Thakur
2019 C conf
IGARSS
Stefano Perna, Claudia Facchinetti, Roberto Formaro, Gianluca Gennarelli, Christopher Gerekos, Riccardo Lanari, Francesco Longo, Giovanni Ludeno, Mauro Mariotti d'Alessandro, Antonio Natale, Carlo Noviello, Giovanni Alberti, Gianfranco Palmese, Claudio Papa, Giulia Pica, Fabio Rocca, Giuseppe Salzillo, Francesco Soldovieri, Stefano Tebaldini, Sanchari Thakur, Paolo Berardino, Lorenzo Bruzzone, Dario Califano, Ilaria Catapano, Luca Ciofaniello, Elena Donini, Carmen Esposito
2019 J jnl
Remote. Sens.
Amir Morteza Alani, Francesco Soldovieri, Ilaria Catapano, Iraklis Giannakis, Gianluca Gennarelli, Livia Lantini, Giovanni Ludeno, Fabio Tosti
2018 J jnl
Remote. Sens.
Giovanni Ludeno, Luigi Capozzoli, Enzo Rizzo, Francesco Soldovieri, Ilaria Catapano
2018 J jnl
Remote. Sens.
Ilaria Catapano, Giovanni Ludeno, Francesco Soldovieri, Francesco Tosti, Giuseppina Padeletti
2017 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Francesco Soldovieri, Gianluca Gennarelli, Ilaria Catapano, DaHan Liao, Traian Dogaru
2017 J jnl
IEEE Trans. Computational Imaging
Gianluca Gennarelli, Ilaria Catapano, Francesco Soldovieri
2017 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Davide Comite, Alessandro Galli, Ilaria Catapano, Francesco Soldovieri
2016 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Emerson Rodrigo Almeida, Jorge Luís Porsani, Ilaria Catapano, Gianluca Gennarelli, Francesco Soldovieri
2016 C conf
IGARSS
Ilaria Catapano, Gianluca Gennarelli, Francesco Soldovieri
2016 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Raffaele Persico, Gennadiy P. Pochanin, Vadym P. Ruban, Alexander A. Orlenko, Ilaria Catapano, Francesco Soldovieri
2015 J jnl
IEEE Trans. Geosci. Remote. Sens.
Ilaria Catapano, Antonio Affinito, Alessio Del Moro, Giovanni Alli, Francesco Soldovieri
2015 J jnl
IEEE Geosci. Remote. Sens. Lett.
Ilaria Catapano, Francesco Soldovieri, Giovanni Alli, Gaetano Mollo, Luca Antonio Forte
2014 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
María A. González-Huici, Ilaria Catapano, Francesco Soldovieri
2014 J jnl
IEEE Trans. Biomed. Eng.
Rosa Scapaticci, Gennaro Bellizzi, Ilaria Catapano, Lorenzo Crocco, Ovidio Mario Bucci
2014 J jnl
IEEE Geosci. Remote. Sens. Lett.
Claudio Papa, Giovanni Alberti, Giuseppe Salzillo, Gianfranco Palmese, Dario Califano, Luca Ciofaniello, Maria Daniele, Claudia Facchinetti, Francesco Longo, Roberto Formaro, Ilaria Catapano, Lorenzo Crocco, Gianluca Gennarelli, Francesco Soldovieri
2014 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Raffaele Solimene, Antonio Cuccaro, Angela Dell'Aversano, Ilaria Catapano, Francesco Soldovieri
2014 J jnl
IEEE Signal Process. Mag.
Raffaele Solimene, Ilaria Catapano, Gianluca Gennarelli, Antonio Cuccaro, Angela Dell'Aversano, Francesco Soldovieri
2012 J jnl
IEEE Geosci. Remote. Sens. Lett.
Ilaria Catapano, Lorenzo Crocco, Yvonne Krellmann, Gunnar Triltzsch, Francesco Soldovieri
2011 J jnl
IEEE Trans. Biomed. Eng.
Gennaro Bellizzi, Ovidio Mario Bucci, Ilaria Catapano
2010 J jnl
IEEE Geosci. Remote. Sens. Lett.
Ilaria Catapano, Lorenzo Crocco
2009 J jnl
IEEE Trans. Geosci. Remote. Sens.
Ilaria Catapano, Lorenzo Crocco
2008 J jnl
IEEE Trans. Geosci. Remote. Sens.
Ilaria Catapano, Lorenzo Crocco, Tommaso Isernia
2007 C conf
IGARSS
Michele D'Urso, Tommaso Isernia, Ilaria Catapano, Lorenzo Crocco
2007 C conf
IGARSS
Ilaria Catapano, Lorenzo Crocco, Tommaso Isernia
2007 J jnl
IEEE Trans. Geosci. Remote. Sens.
Michele D'Urso, Ilaria Catapano, Lorenzo Crocco, Tommaso Isernia
2006 J jnl
IEEE Geosci. Remote. Sens. Lett.
Ilaria Catapano, Lorenzo Crocco, Michele D'Urso, Tommaso Isernia
redb/extractors/elf_extractors/elf_relocations.py
← Index redb/extractors/elf_extractors/elf_relocations.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 ELFRelocation


class ELFRelocationExtractor(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_relocations = []
        self.elastic_index = self.index_prefix + "-elf_relocations"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_relocation_type_string(self, reloc_type: int, machine_arch: str) -> str:
        """Convert relocation type number to human-readable string based on architecture."""
        # This is a simplified mapping - real implementation would need comprehensive
        # architecture-specific relocation type mappings

        common_types = {
            0: "R_NONE",
            1: "R_DIRECT",
            2: "R_PC_RELATIVE",
            3: "R_GOT",
            4: "R_PLT",
            5: "R_COPY",
            6: "R_GLOB_DAT",
            7: "R_JMP_SLOT",
            8: "R_RELATIVE"
        }

        # Architecture-specific mappings could be added here
        if machine_arch == "x86_64":
            x86_64_types = {
                1: "R_X86_64_64",
                2: "R_X86_64_PC32",
                3: "R_X86_64_GOT32",
                4: "R_X86_64_PLT32",
                5: "R_X86_64_COPY",
                6: "R_X86_64_GLOB_DAT",
                7: "R_X86_64_JUMP_SLOT",
                8: "R_X86_64_RELATIVE"
            }
            return x86_64_types.get(reloc_type, f"R_X86_64_{reloc_type}")
        elif machine_arch == "x86":
            i386_types = {
                1: "R_386_32",
                2: "R_386_PC32",
                3: "R_386_GOT32",
                4: "R_386_PLT32",
                5: "R_386_COPY",
                6: "R_386_GLOB_DAT",
                7: "R_386_JMP_SLOT",
                8: "R_386_RELATIVE"
            }
            return i386_types.get(reloc_type, f"R_386_{reloc_type}")

        return common_types.get(reloc_type, f"R_UNKNOWN_{reloc_type}")

    def _extract_relocation_data(self, relocation, section_name: str, machine_arch: str) -> Dict:
        """Extract data from a single relocation entry."""
        try:
            # Get relocation offset
            relocation_offset = relocation.entry.get('r_offset', 0)

            # Get relocation type
            relocation_type = relocation.entry.get('r_info_type', 0)

            # Get symbol index
            relocation_symbol_index = relocation.entry.get('r_info_sym', 0)

            # Get addend (only present in RELA sections)
            relocation_addend = None
            if hasattr(relocation.entry, 'r_addend'):
                relocation_addend = relocation.entry.get('r_addend', 0)

            # Get symbol name if available
            relocation_symbol_name = ""
            if hasattr(relocation, 'symbol') and relocation.symbol:
                relocation_symbol_name = relocation.symbol.name or f"<symbol_{relocation_symbol_index}>"
            else:
                relocation_symbol_name = f"<symbol_{relocation_symbol_index}>"

            # Get type string mapping
            relocation_type_str = self._get_relocation_type_string(relocation_type, machine_arch)

            return ELFRelocation(
                relocation_offset=relocation_offset,
                relocation_type=relocation_type,
                relocation_type_str=relocation_type_str,
                relocation_symbol_index=relocation_symbol_index,
                relocation_symbol_name=relocation_symbol_name,
                relocation_section=section_name,
                relocation_addend=relocation_addend
            )

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

    def _extract_relocations_from_section(self, section, machine_arch: str) -> List[Dict]:
        """Extract all relocations from a relocation section."""
        relocations = []

        try:
            if not hasattr(section, 'iter_relocations'):
                return relocations

            section_name = section.name or f"<unnamed_section>"

            for relocation in section.iter_relocations():
                reloc_data = self._extract_relocation_data(relocation, section_name, machine_arch)
                if reloc_data:
                    relocations.append(reloc_data)

        except Exception as e:
            self.log.error(f"Error extracting relocations from section {section.name}: {e}")

        return relocations

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

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

            def extract_data(elf):
                # Get architecture for relocation type mapping
                machine_arch = self._get_architecture()
                all_relocations = []

                # Iterate through all sections looking for relocation sections with per-section error handling
                for section_index, section in enumerate(elf.iter_sections()):
                    try:
                        # Check if this is a relocation section (.rel or .rela)
                        if (section.name and
                            (section.name.startswith('.rel') or section.name.startswith('.rela')) and
                            hasattr(section, 'iter_relocations')):

                            section_relocations = self._extract_relocations_from_section(section, machine_arch)
                            all_relocations.extend(section_relocations)
                            self.log.debug(f"Extracted {len(section_relocations)} relocations from section {section.name}")
                    except Exception as e:
                        section_name = getattr(section, 'name', f'section_{section_index}')
                        self.log.warning(f"Error processing relocation section {section_name}: {e}")
                        # Continue processing other sections

                return all_relocations

            if not self._is_elf_file():
                return None

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

            self.elf_relocations = result
            return self.elf_relocations

        except Exception as e:
            self.log.error(f"Error extracting ELF relocations {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_relocations
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no relocations (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all relocations
                data = []
                current_time = datetime.now(timezone.utc)
                for reloc in self.elf_relocations:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        reloc.relocation_offset,
                        reloc.relocation_type,
                        reloc.relocation_type_str,
                        reloc.relocation_symbol_index,
                        reloc.relocation_symbol_name,
                        reloc.relocation_addend,
                        reloc.relocation_section,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'relocation_offset', 'relocation_type', 'relocation_type_str',
                    'relocation_symbol_index', 'relocation_symbol_name',
                    'relocation_addend', 'relocation_section',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt64', 'UInt32', 'LowCardinality(String)',
                    'UInt32', 'LowCardinality(String)',
                    'Nullable(Int64)', 'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                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_relocations"