Carsten Montzka

61 papers C 29Journal 31Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Carsten Montzka, Luca Brocca, Hao Chen, Narendra N. Das, Antara Dasgupta, Mehdi Rahmati, Thomas Jagdhuber
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Visakh Sivaprasad, Mehdi Rahmati, Anne Springer, Harry Vereecken, Carsten Montzka
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Haojin Zhao, Carsten Montzka, Harry Vereecken, Harrie-Jan Hendricks-Franssen
2024 C conf
IGARSS
Mehdi Rahmati, Carsten Montzka
2024 C conf
IGARSS
Bagher Bayat, Rahul Raj, Alexander Graf, Harry Vereecken, Carsten Montzka
2024 J jnl
Remote. Sens.
Nick Kupfer, Vo Quoc Tuan, Felix Bachofer, Juliane Huth, Harry Vereecken, Lutz Weihermüller, Carsten Montzka
2024 J jnl
Remote. Sens.
Viktoriia Lovynska, Bagher Bayat, Roland Bol, Shirin Moradi, Mehdi Rahmati, Rahul Raj, Svitlana Sytnyk, Oliver Wiche, Bei Wu, Carsten Montzka
2023 C conf
IGARSS
Anke Fluhrer, Thomas Jagdhuber, Carsten Montzka, Maike Schumacher, Hamed Alemohammad, Alireza Tabatabaeenejad, Harald Kunstmann, Dara Entekhabi
2023 C conf
IGARSS
David Mengen, Anna Balenzano, Thomas Jagdhuber, Francesco Mattia, Harry Vereecken, Carsten Montzka
2023 J jnl
Remote. Sens.
David Mengen, Thomas Jagdhuber, Anna Balenzano, Francesco Mattia, Harry Vereecken, Carsten Montzka
2023 C conf
IGARSS
Thomas Jagdhuber, Anke Fluhrer, David Chaparro, Clémence Dubois, Florian M. Hellwig, Bagher Bayat, Carsten Montzka, Martin J. Baur, Mehdi Ramati, Angelika Kübert, Marlin M. Mueller, Konstantin Schellenberg, Marianne Boehm, François Jonard, Susan C. Steele-Dunne, Maria Piles, Dara Entekhabi
2022 J jnl
Remote. Sens.
Wenqin Huang, Tengfei Hu, Jingqiao Mao, Carsten Montzka, Roland Bol, Songxian Wan, Jianxin Li, Jin Yue, Huichao Dai
2022 conf
AGILE Conf.
Jordan Steven Bates, François Jonard, Rajina Bajracharya, Harry Vereecken, Carsten Montzka
2022 J jnl
Int. J. Digit. Earth
Bagher Bayat, Carsten Montzka, Alexander Graf, Gregory Giuliani, Mattia Santoro, Harry Vereecken
2022 J jnl
Remote. Sens.
Anke Fluhrer, Thomas Jagdhuber, Alireza Tabatabaeenejad, Seyed Hamed Alemohammad, Carsten Montzka, Peter Friedl, Ehsan Forootan, Harald Kunstmann
2022 J jnl
Remote. Sens.
Angela Lausch, Michael E. Schaepman, Andrew K. Skidmore, Eusebiu Catana, Lutz Bannehr, Olaf Bastian, Erik Borg, Jan Bumberger, Peter Dietrich, Cornelia Glässer, Jörg M. Hacker, René Hofer, Thomas Jagdhuber, Sven Jany, András Jung, Arnon Karnieli, Reinhard Klenke, Toralf Kirsten, Uta Ködel, Wolfgang Kresse, Ulf Mallast, Carsten Montzka, Markus Möller, Hannes Mollenhauer, Marion Pause, Minhaz Rahman, Franziska Schrodt, Christiane Schmullius, Claudia Schütze, Peter Selsam, Ralf-Uwe Syrbe, Sina C. Truckenbrodt, Michael Vohland, Martin Volk, Thilo Wellmann, Steffen Zacharias, Roland Baatz
2022 C conf
IGARSS
Jordan Steven Bates, François Jonard, Harry Vereecken, Carsten Montzka
2022 C conf
IGARSS
Jordan Steven Bates, François Jonard, Rajina Bajracharya, Harry Vereecken, Carsten Montzka
2022 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Andreas Colliander, Rolf H. Reichle, Wade T. Crow, Michael H. Cosh, Fan Chen, Steven Chan, Narendra Narayan Das, Rajat Bindlish, Julian Chaubell, Seung-Bum Kim, Qing Liu, Peggy E. O'Neill, Roy Scott Dunbar, Land B. Dang, John S. Kimball, Thomas J. Jackson, Hala Khalid AlJassar, Jun Asanuma, Bimal K. Bhattacharya, Aaron A. Berg, David D. Bosch, Laura L. Bourgeau-Chavez, Todd Caldwell, Jean-Christophe Calvet, Chandra D. Holifield Collins, Karsten H. Jensen, Stanley Livingston, Ernesto López-Baeza, José Martínez-Fernández, Heather McNairn, Mahta Moghaddam, Carsten Montzka, Claudia Notarnicola, Thierry Pellarin, Isabella Greimeister-Pfeil, Jouni Pulliainen, Judith Gpe. Ramos, Mark S. Seyfried, Patrick J. Starks, Zhongbo Su, Rogier van der Velde, Yijian Zeng, Marc Thibeault, Mariette Vreugdenhil, Jeffrey P. Walker, Mehrez Zribi, Dara Entekhabi, Simon H. Yueh
2021 C conf
IGARSS
Yuquan Qu, Carsten Montzka, Harry Vereecken
2021 C conf
IGARSS
Anke Fluhrer, Thomas Jagdhuber, Alireza Tabatabaeenejad, Hamed Alemohammad, Carsten Montzka, Maike Schumacher, Harald Kunstmann
2021 J jnl
Remote. Sens.
Jordan Steven Bates, Carsten Montzka, Marius Schmidt, François Jonard
2021 J jnl
IEEE Geosci. Remote. Sens. Lett.
Carsten Montzka, Heye R. Bogena, Michael Herbst, Michael H. Cosh, Thomas Jagdhuber, Harry Vereecken
2021 J jnl
IEEE Trans. Geosci. Remote. Sens.
Thomas Jagdhuber, Carsten Montzka, Carlos López-Martínez, Martin J. Baur, Moritz Link, María Piles, Narendra Narayan Das, François Jonard
2021 C conf
IGARSS
David Mengen, Carsten Montzka, Thomas Jagdhuber, Anke Fluhrer, Cosimo Brogi, Stephani Baum, Dirk Schüttemeyer, Bagher Bayat, Heye Bogena, Alex Coccia, Gerard Masalias, Verena Trinkel, Jannis Jakobi, François Jonard, Yueling Ma, Francesco Mattia, Davide Palmisano, Uwe Rascher, Giuseppe Satalino, Maike Schumacher, Christian Koyama, Marius Schmidt, Harry Vereecken
2021 C conf
IGARSS
Carsten Montzka, Bagher Bayat, Andreas Tewes, David Mengen, Harry Vereecken
2021 J jnl
Remote. Sens.
Haojin Zhao, Carsten Montzka, Roland Baatz, Harry Vereecken, Harrie-Jan Hendricks-Franssen
2021 J jnl
Remote. Sens.
David Mengen, Carsten Montzka, Thomas Jagdhuber, Anke Fluhrer, Cosimo Brogi, Stephani Baum, Dirk Schüttemeyer, Bagher Bayat, Heye Bogena, Alex Coccia, Gerard Masalias, Verena Trinkel, Jannis Jakobi, François Jonard, Yueling Ma, Francesco Mattia, Davide Palmisano, Uwe Rascher, Giuseppe Satalino, Maike Schumacher, Christian Koyama, Marius Schmidt, Harry Vereecken
2021 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Bagher Bayat, Fernando Camacho, Jaime E. Nickeson, Michael H. Cosh, John D. Bolten, Harry Vereecken, Carsten Montzka
2021 C conf
IGARSS
Jordan Steven Bates, Carsten Montzka, Marius Schmidt, François Jonard
2020 J jnl
Int. J. Digit. Earth
Ian McCallum, Carsten Montzka, Bagher Bayat, Stefan Kollet, Andrii Kolotii, Nataliia Kussul, Mykola Lavreniuk, Anthony Lehmann, Joan Masó, Paolo Mazzetti, Aline Mosnier, Emma Perracchione, Mario Putti, Mattia Santoro, Ivette Serral, Leonid Shumilo, Daniel Spengler, Steffen Fritz
2020 J jnl
Remote. Sens.
Angela Lausch, Michael E. Schaepman, Andrew K. Skidmore, Sina C. Truckenbrodt, Jörg M. Hacker, Jussi Baade, Lutz Bannehr, Erik Borg, Jan Bumberger, Peter Dietrich, Cornelia Gläßer, Dagmar Haase, Marco Heurich, Thomas Jagdhuber, Sven Jany, Rudolf Krönert, Markus Möller, Hannes Mollenhauer, Carsten Montzka, Marion Pause, Christian Rogaß, Nesrin Salepci, Christiane Schmullius, Franziska Schrodt, Claudia Schütze, Christian Schweitzer, Peter Selsam, Daniel Spengler, Michael Vohland, Martin Volk, Ute Weber, Thilo Wellmann, Ulrike Werban, Steffen Zacharias, Christian Thiel
2020 C conf
IGARSS
Carsten Montzka, Cosimo Brogi, David Mengen, Maria Matveeva, Stephani Baum, Dirk Schüttemeyer, Bagher Bayat, Heye Bogena, Alex Coccia, Gerard Masalias, Verena Graf, Jannis Jakobi, François Jonard, Yueling Ma, Francesco Mattia, Davide Palmisano, Uwe Rascher, Giuseppe Satalino, Thomas Jagdhuber, Anke Fluhrer, Maike Schumacher, Marius Schmidt, Harry Vereecken
2019 C conf
IGARSS
Carsten Montzka, Heye Bogena, Harry Vereecken
2019 J jnl
Remote. Sens.
Angela Lausch, Jussi Baade, Lutz Bannehr, Erik Borg, Jan Bumberger, Sabine Chabrillat, Peter Dietrich, Heike Gerighausen, Cornelia Gläßer, Jörg M. Hacker, Dagmar Haase, Thomas Jagdhuber, Sven Jany, András Jung, Arnon Karnieli, Roland Kraemer, Mohsen Makki, Christian Mielke, Markus Möller, Hannes Mollenhauer, Carsten Montzka, Marion Pause, Christian Rogaß, Offer Rozenstein, Christiane Schmullius, Franziska Schrodt, Martin Schrön, Karsten Schulz, Claudia Schütze, Christian Schweitzer, Peter Selsam, Andrew K. Skidmore, Daniel Spengler, Christian Thiel, Sina C. Truckenbrodt, Michael Vohland, Robert Wagner, Ute Weber, Ulrike Werban, Ute Wollschläger, Steffen Zacharias, Michael E. Schaepman
2019 J jnl
IEEE Trans. Geosci. Remote. Sens.
Thomas Jagdhuber, Alexandra Georges Konings, Kaighin Alexander McColl, Seyed Hamed Alemohammad, Narendra Narayan Das, Carsten Montzka, Moritz Link, Ruzbeh Akbar, Dara Entekhabi
2019 J jnl
Remote. Sens.
Yuquan Qu, Zhongli Zhu, Linna Chai, Shaomin Liu, Carsten Montzka, Jin Liu, Xiaofan Yang, Zheng Lu, Rui Jin, Xiang Li, Zhixia Guo, Jie Zheng
2018 J jnl
Remote. Sens.
Carsten Montzka, Kathrina Rötzer, Heye R. Bogena, Nilda Sanchez-Martin, Harry Vereecken
2018 C conf
IGARSS
Sten Schmidl Søbjærg, Moritz Link, Thomas Jagdhuber, Carsten Montzka, François Jonard, Stephan Dill, Markus Peichl, Thomas Meyer
2018 J jnl
Remote. Sens.
Christof Lorenz, Carsten Montzka, Thomas Jagdhuber, Patrick Laux, Harald Kunstmann
2018 C conf
IGARSS
Thomas Jagdhuber, Dara Entekhabi, Narendra N. Das, Moritz Link, Martin J. Baur, Ruzbeh Akbar, Carsten Montzka, Seung-Bum Kim, Simon Yueh, Ismail Baris
2017 C conf
IGARSS
Carsten Montzka, Heye R. Bogena, Marek Zreda, Alessandra Monerris, Ross Morrison, Muddu Sekhar, Harry Vereecken
2017 C conf
IGARSS
Thomas Jagdhuber, Dara Entekhabi, Narendra N. Das, Moritz Link, Carsten Montzka, Seung-Bum Kim, Simon Yueh
2017 C conf
IGARSS
Thomas Jagdhuber, Martin J. Baur, Moritz Link, Maria Piles, Dara Entekhabi, Carsten Montzka, Jaakko Seppänen, Oleg Antropov, Jaan Praks, Alexander Löw
2017 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Kathrina Rötzer, Carsten Montzka, Dara Entekhabi, Alexandra Georges Konings, Kaighin Alexander McColl, Maria Piles, Harry Vereecken
2017 J jnl
Remote. Sens.
Carsten Montzka, Heye R. Bogena, Marek Zreda, Alessandra Monerris, Ross Morrison, Muddu Sekhar, Harry Vereecken
2016 J jnl
IEEE Trans. Geosci. Remote. Sens.
Carsten Montzka, Thomas Jagdhuber, Ralf Horn, Heye R. Bogena, Irena Hajnsek, Andreas Reigber, Harry Vereecken
2016 C conf
IGARSS
Thomas Jagdhuber, Dara Entekhabi, Alexandra Georges Konings, Kaighin Alexander McColl, Seyed Hamed Alemohammad, Narendra N. Das, Carsten Montzka, Maria Piles
2015 J jnl
Remote. Sens.
Muhammad Ali, Carsten Montzka, Anja Stadler, Gunter Menz, Frank Thonfeld, Harry Vereecken
2015 C conf
IGARSS
Thomas Jagdhuber, Dara Entekhabi, Irena Hajnsek, Alexandra Georges Konings, Kaighin Alexander McColl, Seyed Hamed Alemohammad, Narendra N. Das, Carsten Montzka
2014 C conf
IGARSS
Carsten Montzka, Heye Bogena, Thomas Jagdhuber, Irena Hajnsek, Ralf Horn, Andreas Reigber, Sayeh Hasan, Christoph Rüdiger, Marc Jäger, Harry Vereecken
2013 C conf
IGARSS
Carsten Montzka, Jennifer P. Grant, Harrie-Jan Hendricks-Franssen, Matthias Drusch, Harry Vereecken
2013 J jnl
IEEE Trans. Geosci. Remote. Sens.
Carsten Montzka, Heye Bogena, Lutz Weihermüller, François Jonard, Catherine Bouzinac, Juha Kainulainen, Jan E. Balling, Alexander Loew, Johanna T. Dall'Amico, Erkka Rouhe, Jan Vanderborght, Harry Vereecken
2013 C conf
IGARSS
Muhammad Ali, Carsten Montzka, Anja Stadler, Gunter Menz, Harry Vereecken
2012 C conf
IGARSS
Carsten Montzka, Sayeh Hasan, Heye Bogena, Irena Hajnsek, Ralf Horn, Thomas Jagdhuber, Andreas Reigber, Normen Hermes, Christoph Rüdiger, Harry Vereecken
2012 J jnl
Sensors
Carsten Montzka, Valentijn R. N. Pauwels, Harrie-Jan Hendricks-Franssen, Xujun Han, Harry Vereecken
2012 C conf
IGARSS
Kathrina Rötzer, Carsten Montzka, Heye Bogena, Wolfgang Wagner, Richard Kidd, Harry Vereecken
2011 C conf
IGARSS
Carsten Montzka, Harrie-Jan Hendricks-Franssen, Matthias Drusch, Hamid Moradkhani, Lutz Weihermüller, Diego Fernández-Prieto, Heye Bogena, Jan Vanderborght, Harry Vereecken
2011 C conf
IGARSS
Carsten Montzka, Heye Bogena, Lutz Weihermüller, François Jonard, Marin Dimitrov, Catherine Bouzinac, Juha Kainulainen, Jan E. Balling, Jan Vanderborght, Harry Vereecken
2010 C conf
IGARSS
Juha Kainulainen, Kimmo Rautiainen, Pauli Sievinen, Jaakko Seppänen, Erkka Rouhe, Martti Hallikainen, Johanna T. Dall'Amico, Florian Schlenz, Alexander Loew, Alexander Bircher, Carsten Montzka
2008 J jnl
Environ. Model. Softw.
Carsten Montzka, Morton J. Canty, Peter Kreins, Ralf Kunkel, Gunter Menz, Harry Vereecken, Frank Wendland
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"