Nelson Costa

105 papers B 5C 1Misc 1Journal 39Unranked 59
YearRankTypeTitle / Venue / Authors
2025 conf
OFC
Bruno Correia, João Pedro, Nelson Costa
2025 conf
OFC
André Souza, Nelson Costa, João Pedro
2025 J jnl
J. Opt. Commun. Netw.
André Souza, Nelson Costa, João Pedro, João Pires
2025 conf
OFC
Sasipim Srivallapanondh, Pedro J. Freire, Giuseppe Parisi, Mariano Devigili, Nelson Costa, Bernhard Spinnler, Antonio Napoli, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2024 conf
OFC
Carlos Castro, Shiyi Xia, Antonio Napoli, João Pedro, Yesica Rumaldo, Nelson Costa, Nicola Calabretta, Bernhard Spinnler, Albert Rafel
2024 J jnl
J. Opt. Commun. Netw.
Mariano Devigili, Marc Ruiz, Nelson Costa, Carlos Castro, Antonio Napoli, João Pedro, Luis Velasco
2024 conf
OFC
André Souza, Nelson Costa, João Pedro, João Pires
2024 J jnl
J. Opt. Commun. Netw.
André Souza, Bruno Correia, Antonio Napoli, Vittorio Curri, Nelson Costa, João Pedro, João Pires
2024 conf
OFC
Mariano Devigili, Diogo Gonçalo Sequeira, Marc Ruiz, Nelson Costa, Carlos Castro, Antonio Napoli, João Pedro, Luis Velasco
2024 J jnl
J. Opt. Commun. Netw.
Lareb Zar Khan, João Pedro, Nelson Costa, Andrea Sgambelluri, Antonio Napoli, Nicola Sambo
2024 conf
ICTON
André Souza, Nelson Costa, Laia Nadal, Ramon Casellas, Antonio Melgar, José Manuel Rivas-Moscoso, Marco Quagliotti, Emilio Riccardi, Antonio Napoli, João Pedro
2024 J jnl
J. Opt. Commun. Netw.
Mohammad M. Hosseini, João Pedro, Nelson Costa, Carlos Castro, Antonio Napoli
2024 conf
ONDM
Lareb Zar Khan, João Pedro, Omran Ayoub, Nelson Costa, Andrea Sgambelluri, Lorenzo De Marinis, Antonio Napoli, Nicola Sambo
2024 conf
ICTON
André Souza, Bruno Correia, Antonio Napoli, Vittorio Curri, Nelson Costa, João Pedro, João Pires
2023 conf
ONDM
Bruno Correia, Rasoul Sadeghi, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2023 J jnl
J. Opt. Commun. Netw.
André Souza, Nelson Costa, João Pedro, João Pires
2023 conf
ICTON
André Souza, Nelson Costa, João Pedro, João Pires
2023 conf
VCC
Mohammad M. Hosseini, João Pedro, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2023 conf
OFC
Lareb Zar Khan, Pedro J. Freire, João Pedro, Nelson Costa, Antonio Napoli, Nicola Sambo
2023 J jnl
JOCN
Lareb Zar Khan, João Pedro, Nelson Costa, Lorenzo De Marinis, Antonio Napoli, Nicola Sambo
2023 conf
OFC
Mariano Devigili, Marc Ruiz, Sima Barzegar, Nelson Costa, Antonio Napoli, João Pedro, Luis Velasco
2023 conf
ICTON
Nicola Sambo, Carlos Castro, Nelson Costa, Piero Castoldi, Antonio Napoli
2023 J jnl
CoRR
Mohannad Abu-Romoh, Nelson Costa, Yves Jaouën, Antonio Napoli, João Pedro, Bernhard Spinnler, Mansoor I. Yousefi
2023 conf
ICTON
Mariano Devigili, Marc Ruiz, Nelson Costa, Carlos Castro, Antonio Napoli, João Pedro, Luis Velasco
2023 J jnl
Sensors
Masab Iqbal, Luis Velasco, Nelson Costa, Antonio Napoli, João Pedro, Marc Ruiz
2023 conf
OFC
Sasipim Srivallapanondh, Pedro J. Freire, Bernhard Spinnler, Nelson Costa, Antonio Napoli, Sergei K. Turitsyn, Jaroslaw E. Prilepsky
2023 Misc conf
PSC
Mohammad M. Hosseini, João Pedro, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2023 J jnl
CoRR
Sasipim Srivallapanondh, Pedro J. Freire, Ashraful Alam, Nelson Costa, Bernhard Spinnler, Antonio Napoli, Egor Sedov, Sergei K. Turitsyn, Jaroslaw E. Prilepsky
2023 J jnl
JOCN
Mohammad M. Hosseini, João Pedro, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2023 J jnl
JOCN
Diogo Gonçalo Sequeira, Marc Ruiz, Nelson Costa, Antonio Napoli, João Pedro, Luis Velasco
2023 conf
OFC
André Souza, António Eira, Nelson Costa, João Pedro, João Pires
2023 conf
OFC
Mohammad M. Hosseini, João Pedro, Nelson Costa, Antonio Napoli, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2023 J jnl
J. Opt. Commun. Netw.
Mohammad M. Hosseini, João Pedro, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2023 conf
ONDM
Rasoul Sadeghi, Bruno Correia, Elliot London, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2023 conf
ICTON
Prasunika Khare, Nelson Costa, João Pedro, Antonio Napoli, Farhad Arpanaei, Jaume Comellas, Marc Ruiz, Luis Velasco
2023 J jnl
Sensors
Masab Iqbal, Luis Velasco, Marc Ruiz, Nelson Costa, Antonio Napoli, João Pedro, Jaume Comellas
2022 J jnl
Sensors
Diogo Gonçalo Sequeira, Marc Ruiz, Nelson Costa, Antonio Napoli, João Pedro, Luis Velasco
2022 J jnl
JOCN
André Souza, Nelson Costa, João Pedro, João Pires
2022 conf
ONDM
Rasoul Sadeghi, Bruno Correia, André Souza, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2022 J jnl
JOCN
João Pedro, Nelson Costa, Steve Sanders
2022 conf
OFC
Pedro J. Freire, Bernhard Spinnler, Daniel Abode, Jaroslaw E. Prilepsky, Abdallah A. I. Ali, Nelson Costa, Wolfgang Schairer, Antonio Napoli, Andrew D. Ellis, Sergei K. Turitsyn
2022 J jnl
CoRR
Pedro J. Freire, Bernhard Spinnler, Daniel Abode, Jaroslaw E. Prilepsky, Abdallah A. I. Ali, Nelson Costa, Wolfgang Schairer, Antonio Napoli, Andrew D. Ellis, Sergei K. Turitsyn
2022 conf
OFC
Masab Iqbal, Marc Ruiz, Nelson Costa, Antonio Napoli, João Pedro, Luis Velasco
2022 J jnl
JOCN
João Pedro, Nelson Costa
2022 J jnl
CoRR
Pedro J. Freire, Sasipim Srivallapanondh, Michael Anderson, Bernhard Spinnler, Thomas Bex, Tobias A. Eriksson, Antonio Napoli, Wolfgang Schairer, Nelson Costa, Michaela Blott, Sergei K. Turitsyn, Jaroslaw E. Prilepsky
2022 J jnl
CoRR
Sasipim Srivallapanondh, Pedro J. Freire, Bernhard Spinnler, Nelson Costa, Antonio Napoli, Sergei K. Turitsyn, Jaroslaw E. Prilepsky
2022 J jnl
JOCN
Masab Iqbal, Luis Velasco, Nelson Costa, Antonio Napoli, João Pedro, Marc Ruiz
2022 J jnl
CoRR
Mohannad Abu-Romoh, Nelson Costa, Antonio Napoli, Bernhard Spinnler, Yves Jaouën, Mansoor I. Yousefi
2022 conf
ONDM
Mohammad M. Hosseini, João Pedro, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2022 J jnl
CoRR
Mohannad Abu-Romoh, Nelson Costa, Antonio Napoli, João Pedro, Yves Jaouën, Mansoor I. Yousefi
2022 B conf
GLOBECOM
Mohammad M. Hosseini, João Pedro, Nelson Costa, Antonio Napoli, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2022 conf
OFC
André Souza, Rasoul Sadeghi, Bruno Correia, Nelson Costa, Antonio Napoli, Vittorio Curri, João Pedro, João Pires
2022 B conf
GLOBECOM
João Pedro, Nelson Costa
2022 conf
OFC
Rasoul Sadeghi, Bruno Correia, Emanuele Virgillito, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2022 conf
ICC
Mohammad M. Hosseini, João Pedro, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2022 J jnl
JOCN
Mohammad M. Hosseini, João Pedro, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2022 conf
OFC
Mohammad M. Hosseini, João Pedro, Nelson Costa, Antonio Napoli, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2022 conf
ONDM
Masab Iqbal, Luis Velasco, Marc Ruiz, Antonio Napoli, João Pedro, Nelson Costa
2022 conf
OFC
André Souza, Nelson Costa, João Pedro, João Pires
2022 J jnl
CoRR
Pedro J. Freire, Antonio Napoli, Diego Argüello Ron, Bernhard Spinnler, Michael Anderson, Wolfgang Schairer, Thomas Bex, Nelson Costa, Sergei K. Turitsyn, Jaroslaw E. Prilepsky
2022 J jnl
CoRR
Pedro J. Freire, Michael Anderson, Bernhard Spinnler, Thomas Bex, Jaroslaw E. Prilepsky, Tobias A. Eriksson, Nelson Costa, Wolfgang Schairer, Michaela Blott, Antonio Napoli, Sergei K. Turitsyn
2021 conf
CAMAD
André Souza, Bruno Correia, Nelson Costa, João Pedro, João Pires
2021 J jnl
IEEE J. Sel. Areas Commun.
Luis Velasco, Sima Barzegar, Diogo Gonçalo Sequeira, Alessio Ferrari, Nelson Costa, Vittorio Curri, João Pedro, Antonio Napoli, Marc Ruiz
2021 conf
NoF
Rasoul Sadeghi, Bruno Correia, Emanuele Virgillito, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2021 B conf
GLOBECOM
Mohammad M. Hosseini, João Pedro, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2021 J jnl
CoRR
Pedro J. Freire, Yevhenii Osadchuk, Antonio Napoli, Bernhard Spinnler, Wolfgang Schairer, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2021 conf
OFC
Pedro J. Freire, Yevhenii Osadchuk, Bernhard Spinnler, Wolfgang Schairer, Antonio Napoli, Nelson Costa, Jaroslaw E. Prilepsky, Sergei K. Turitsyn
2021 conf
ECOC
Diogo Gonçalo Sequeira, Marc Ruiz, Nelson Costa, Antonio Napoli, João Pedro, Luis Velasco
2021 conf
ONDM
Rasoul Sadeghi, Bruno Correia, Emanuele Virgillito, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2021 conf
OFC
Bruno Correia, Rasoul Sadeghi, Emanuele Virgillito, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2021 conf
ECOC
André Souza, Nelson Costa, João Pedro, João Pires
2021 conf
ECOC
Rasoul Sadeghi, Bruno Correia, Emanuele Virgilito, Elliot London, Nelson Costa, João Pedro, Antonio Napoli, Vittorio Curri
2021 conf
OFC
Rasoul Sadeghi, Bruno Correia, Emanuele Virgillito, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2021 J jnl
JOCN
Bruno Correia, Rasoul Sadeghi, Emanuele Virgillito, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2021 conf
OFC
João Pedro, Nelson Costa, Steve Sanders
2020 conf
RWS
Alexander Tomkins, Eric Juntunen, Alan Poon, Hamed Golestaneh, Hassan Shakoor, Grigori Temkine, Ghazal Nabovati, Nima Gilanpour, Austin Chen, Adrine Sargsyan, Nathan Smith, Asim Ali, Kim Law, Brad Lynch, Craig Farnsworth, Alex Lau, Chris Hansen, Nelson Costa, Atabak Rashidian, Marc Supinski, Keith Riley
2020 conf
ICTON
Nicola Sambo, Alessio Ferrari, Antonio Napoli, Nelson Costa, João Pedro, Bernd Sommerkorn-Krombholz, Piero Castoldi, Vittorio Curri
2020 conf
OFC
Robert Emmerich, António Eira, Nelson Costa, Pablo Wilke Berenguer, Colja Schubert, Johannes Karl Fischer, João Pedro
2020 J jnl
JOCN
Francesco Paolucci, Robert Emmerich, António Eira, Nelson Costa, João Pedro, Pablo Wilke Berenguer, Colja Schubert, Johannes K. Fischer, Francesco Fresi, Andrea Sgambelluri, Filippo Cugini
2020 conf
ECOC
Pedro J. Freire, Vladislav Neskornuik, Antonio Napoli, Bernhard Spinnler, Nelson Costa, Jaroslaw E. Prilepsky, Emilio Riccardi, Sergei K. Turitsyn
2020 B conf
GLOBECOM
Bruno Correia, Rasoul Sadeghi, Emanuele Virgillito, Antonio Napoli, Nelson Costa, João Pedro, Vittorio Curri
2020 J jnl
JOCN
João Pedro, Nelson Costa, Sílvia Pato
2020 C conf
EDUCON
Hélder Vieira, Nelson Costa, Luís Pinto Coelho, Joaquim Fernando Almeida Alves
2020 conf
ECOC
Vladislav Neskorniuk, Pedro J. Freire, Antonio Napoli, Bernhard Spinnler, Wolfgang Schairer, Jaroslaw E. Prilepsky, Nelson Costa, Sergei K. Turitsyn
2020 J jnl
Int. J. Online Biomed. Eng.
Hélder Vieira, Nelson Costa, Joaquim Fernando Almeida Alves, Luís Pinto Coelho
2020 conf
ONDM
João Pedro, João Vasco Santos, Nelson Costa
2019 conf
ICTON
João Pedro, Nelson Costa, Bernd Sommerkorn-Krombholz, Sílvia Pato
2019 conf
ICTON
António Eira, Nelson Costa, João Pedro
2019 conf
OFC
João Pedro, Nelson Costa
2019 conf
ICTON
Alessio Ferrari, Antonio Napoli, Johannes K. Fischer, Nelson Costa, João Pedro, Nicola Sambo, Erwan Pincemin, Bernd Sommerkorn-Krombholz, Vittorio Curri
2018 conf
ICTON
Johannes K. Fischer, Mattia Cantono, Vittorio Curri, Ralf-Peter Braun, Nelson Costa, João Pedro, Erwan Pincemin, Philippe Doare, Claude Le Bouëtté, Antonio Napoli
2018 conf
ICTON
António Eira, Nelson Costa, João Pedro
2018 J jnl
JOCN
João Santos, Nelson Costa, João Pedro
2018 conf
ICTON
João Pedro, Nelson Costa
2017 conf
OFC
João Santos, Nelson Costa, João Pedro
2017 conf
ECOC
António Eira, Nelson Costa, João Pedro
2017 conf
ICTON
João Pedro, Nelson Costa, Matthias Gunkel
2016 J jnl
JOCN
Benoît Clouet, João Pedro, Nelson Costa, Maxim Kuschnerov, Anton Schex, Juraj Slovak, Danish Rafique, Antonio Napoli
2016 conf
ICTON
João Pedro, Nelson Costa
2015 J jnl
JOCN
Matthias Gunkel, Arnold Mattheus, Felix Wissel, Antonio Napoli, João Pedro, Nelson Costa, Talha Rahman, Gianluca Meloni, Francesco Fresi, Filippo Cugini, Nicola Sambo, Marc Bohn
2009 conf
ICNS
Nelson Costa, Mário Serafim Nunes
2007 J jnl
Int. J. Humanoid Robotics
Darwin G. Caldwell, Nikolaos G. Tsagarakis, Sophia Kousidou, Nelson Costa, Ioannis Sarakoglou
2006 J jnl
Int. J. Autom. Comput.
Nelson Costa, Milan Bezdicek, Michael Brown, John O. Gray, Darwin G. Caldwell, Stephen Hutchins
2003 J jnl
IEEE J. Sel. Areas Commun.
Dmitry Chizhik, Jonathan Ling, Peter W. Wolniansky, Reinaldo A. Valenzuela, Nelson Costa, Kris Huber
2002 B conf
PIMRC
Jonathan Ling, Dmitry Chizhik, Peter Wolinansky, Reinaldo A. Valenzuela, Nelson Costa, Kris Huber
redb/extractors/elf_extractors/elf_sections.py
← Index redb/extractors/elf_extractors/elf_sections.py python
import inspect
import hashlib
import math
from collections import Counter
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 ELFSection


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

    def _is_empty_result(self, extracted_data) -> bool:
        """
        Override: Empty sections is an ERROR, not a valid empty case.
        A valid ELF file must have sections (at minimum a null section).
        """
        # Always return False - empty sections should be treated as an error
        return False

    def _calculate_entropy(self, data: bytes) -> float:
        """Calculate Shannon entropy of data."""
        if not data:
            return 0.0

        try:
            # Count frequency of each byte
            byte_counts = Counter(data)
            data_len = len(data)

            # Calculate entropy
            entropy = 0.0
            for count in byte_counts.values():
                if count > 0:
                    frequency = count / data_len
                    entropy -= frequency * math.log2(frequency)

            return entropy
        except Exception as e:
            self.log.error(f"Error calculating entropy: {e}")
            return 0.0

    def _map_section_type(self, sh_type_str: str) -> int:
        """Map section type string to enum value."""
        type_map = {
            'SHT_NULL': 0,
            'SHT_PROGBITS': 1,
            'SHT_SYMTAB': 2,
            'SHT_STRTAB': 3,
            'SHT_RELA': 4,
            'SHT_HASH': 5,
            'SHT_DYNAMIC': 6,
            'SHT_NOTE': 7,
            'SHT_NOBITS': 8,
            'SHT_REL': 9,
            'SHT_DYNSYM': 11
        }
        return type_map.get(sh_type_str, 0)

    def _decode_section_flags(self, flags: int) -> List[str]:
        """Decode section flags to human-readable strings."""
        flag_strings = []

        # Common ELF section flags
        if flags & 0x1:  # SHF_WRITE
            flag_strings.append('WRITE')
        if flags & 0x2:  # SHF_ALLOC
            flag_strings.append('ALLOC')
        if flags & 0x4:  # SHF_EXECINSTR
            flag_strings.append('EXECINSTR')
        if flags & 0x10:  # SHF_MERGE
            flag_strings.append('MERGE')
        if flags & 0x20:  # SHF_STRINGS
            flag_strings.append('STRINGS')
        if flags & 0x40:  # SHF_INFO_LINK
            flag_strings.append('INFO_LINK')
        if flags & 0x80:  # SHF_LINK_ORDER
            flag_strings.append('LINK_ORDER')
        if flags & 0x100:  # SHF_OS_NONCONFORMING
            flag_strings.append('OS_NONCONFORMING')
        if flags & 0x200:  # SHF_GROUP
            flag_strings.append('GROUP')
        if flags & 0x400:  # SHF_TLS
            flag_strings.append('TLS')

        return flag_strings if flag_strings else ['NONE']

    def _extract_section_data(self, section) -> Dict:
        """Extract data from a single section."""
        try:
            header = section.header

            # Get section name (handle empty names)
            section_name = section.name if section.name else f"<unnamed_{section.header.get('sh_name', 0)}>"

            # Get section type and map to enum
            sh_type_str = header.get('sh_type', 'SHT_NULL')
            section_type_enum = self._map_section_type(sh_type_str)
            section_type_str = sh_type_str.replace('SHT_', '') if sh_type_str.startswith('SHT_') else sh_type_str

            # Get section properties
            section_flags = header.get('sh_flags', 0)
            section_flags_str = self._decode_section_flags(section_flags)
            section_addr = header.get('sh_addr', 0)
            section_offset = header.get('sh_offset', 0)
            section_size = header.get('sh_size', 0)
            section_link = header.get('sh_link', 0)
            section_info = header.get('sh_info', 0)
            section_addralign = header.get('sh_addralign', 0)
            section_entsize = header.get('sh_entsize', 0)

            # Calculate entropy and hashes for section data
            section_entropy = 0.0
            section_sha256 = ""
            section_md5 = ""

            try:
                if section_size > 0 and section_type_str != 'NOBITS':
                    section_data = section.data()
                    if section_data:
                        # Calculate entropy
                        section_entropy = self._calculate_entropy(section_data)

                        # Calculate hashes
                        section_sha256 = hashlib.sha256(section_data).hexdigest()
                        section_md5 = hashlib.md5(section_data).hexdigest()
            except Exception as e:
                self.log.warning(f"Could not read section '{section_name}' data: {e}")
                section_entropy = 0.0
                section_sha256 = ""
                section_md5 = ""

            return ELFSection(
                section_name=section_name,
                section_type=section_type_enum,
                section_type_str=section_type_str,
                section_flags=section_flags,
                section_flags_str=section_flags_str,
                section_addr=section_addr,
                section_offset=section_offset,
                section_size=section_size,
                section_link=section_link,
                section_info=section_info,
                section_addralign=section_addralign,
                section_entsize=section_entsize,
                section_entropy=section_entropy,
                section_sha256=section_sha256,
                section_md5=section_md5
            )

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

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

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

            def extract_data(elf):
                sections_data = []

                # Iterate through all sections with per-section error handling
                for section_index, section in enumerate(elf.iter_sections()):
                    try:
                        section_data = self._extract_section_data(section)
                        if section_data:
                            sections_data.append(section_data)
                        else:
                            self.log.warning(f"Failed to extract data for section {section_index}")
                    except Exception as e:
                        self.log.warning(f"Error processing section {section_index}: {e}")
                        # Continue processing other sections

                return sections_data

            if not self._is_elf_file():
                return None

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

            self.elf_sections = result
            return self.elf_sections

        except Exception as e:
            self.log.error(f"Error extracting ELF sections {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_sections
        elif exporter_type == "ClickHouseExporter":
            try:
                if not self.elf_sections:
                    return None

                # Prepare data arrays for all sections
                data = []
                current_time = datetime.now(timezone.utc)
                for section in self.elf_sections:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        section.section_name,
                        section.section_type,
                        section.section_type_str,
                        section.section_flags,
                        section.section_flags_str,
                        section.section_addr,
                        section.section_offset,
                        section.section_size,
                        section.section_link,
                        section.section_info,
                        section.section_addralign,
                        section.section_entsize,
                        section.section_entropy,
                        section.section_sha256,
                        section.section_md5,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'section_name', 'section_type', 'section_type_str',
                    'section_flags', 'section_flags_str',
                    'section_addr', 'section_offset', 'section_size',
                    'section_link', 'section_info', 'section_addralign', 'section_entsize',
                    'section_entropy', 'section_sha256', 'section_md5',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)',
                    "Enum8('NULL'=0, 'PROGBITS'=1, 'SYMTAB'=2, 'STRTAB'=3, 'RELA'=4, 'HASH'=5, 'DYNAMIC'=6, 'NOTE'=7, 'NOBITS'=8, 'REL'=9, 'DYNSYM'=11)",
                    'LowCardinality(String)',
                    'UInt64',
                    'Array(LowCardinality(String))',
                    'UInt64', 'UInt64', 'UInt64',
                    'UInt32', 'UInt32', 'UInt64', 'UInt64',
                    'Float64',
                    'FixedString(64)', 'FixedString(32)',
                    '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_sections"