Vincent Andrieu

126 papers B 1C 3Journal 76Unranked 46
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Autom. Control.
Andreu Cecilia, Samuele Zoboli, Daniele Astolfi, Ulysse Serres, Vincent Andrieu
2026 J jnl
Autom.
Samuele Zoboli, Daniele Astolfi, Vincent Andrieu, Giacomo Casadei, Luca Zaccarian
2026 J jnl
Autom.
Ling Ma, Nicolas Vanspranghe, Daniele Astolfi, Vincent Andrieu, Mathieu Bajodek, Xuyang Lou
2026 J jnl
Syst. Control. Lett.
Salim Zekraoui, Daniele Astolfi, Vincent Andrieu
2025 J jnl
Autom.
Mathieu Marchand, Vincent Andrieu, Sylvain Bertrand, Hélène Piet-Lahanier
2025 J jnl
Autom.
Alexandre Cellier-Devaux, Daniele Astolfi, Vincent Andrieu
2025 J jnl
Syst. Control. Lett.
Vincent Andrieu, Lucas Brivadis, Jean-Paul Gauthier, Ludovic Sacchelli, Ulysse Serres
2025 conf
CDC
Beatrice Zambotti, Vincent Andrieu, Daniele Astolfi, Laurent Bako, Madiha Nadri, Luca Zaccarian
2025 J jnl
IEEE Trans. Autom. Control.
Elena Petri, Romain Postoyan, Daniele Astolfi, Dragan Nesic, Vincent Andrieu
2025 J jnl
IEEE Trans. Autom. Control.
Ling Ma, Vincent Andrieu, Daniele Astolfi, Mathieu Bajodek, Cheng-Zhong Xu, Xuyang Lou
2025 conf
CDC
A. Benchebba, Romain Postoyan, Vincent Andrieu, Daniele Astolfi
2025 J jnl
IEEE Control. Syst. Lett.
Alexandre Cellier-Devaux, Luca Zaccarian, Daniele Astolfi, Vincent Andrieu
2024 conf
CDC
Gia Quoc Bao Tran, Pauline Bernard, Vincent Andrieu, Daniele Astolfi
2024 J jnl
IEEE Trans. Autom. Control.
Mattia Giaccagli, Daniele Astolfi, Vincent Andrieu, Lorenzo Marconi
2024 J jnl
CoRR
Laurent Bako, Madiha Nadri, Vincent Andrieu, Qinghua Zhang
2024 J jnl
IEEE Trans. Autom. Control.
Mattia Giaccagli, Samuele Zoboli, Daniele Astolfi, Vincent Andrieu, Giacomo Casadei
2023 conf
CDC
Ling Ma, Vincent Andrieu, Daniele Astolfi, Cheng-Zhong Xu, Xuyang Lou
2023 conf
MED
Mathieu Marchand, Vincent Andrieu, Sylvain Bertrand, Hélène Piet-Lahanier
2023 conf
CDC
Mattia Giaccagli, Daniele Astolfi, Vincent Andrieu
2023 J jnl
Syst. Control. Lett.
Lucas Brivadis, Vincent Andrieu, Pauline Bernard, Ulysse Serres
2023 J jnl
CoRR
Andreu Cecilia, Samuele Zoboli, Daniele Astolfi, Ulysse Serres, Vincent Andrieu
2023 J jnl
CoRR
Elena Petri, Romain Postoyan, Daniele Astolfi, Dragan Nesic, Vincent Andrieu
2023 conf
CDC
Samuele Zoboli, Andreu Cecilia, Ulysse Serres, Daniele Astolfi, Vincent Andrieu
2023 J jnl
Autom.
Mattia Giaccagli, Vincent Andrieu, Sophie Tarbouriech, Daniele Astolfi
2023 J jnl
IEEE Trans. Control. Syst. Technol.
Tanguy Simon, Mattia Giaccagli, Jean-François Trégouët, Daniele Astolfi, Vincent Andrieu, Hervé Morel, Xuefang Lin-Shi
2023 J jnl
Autom.
Samuele Zoboli, Daniele Astolfi, Vincent Andrieu
2022 conf
HANDY
Daniele Astolfi, Vincent Andrieu
2022 conf
ECC
Swann Marx, Daniele Astolfi, Vincent Andrieu
2022 conf
CDC
Daniele Astolfi, Swann Marx, Vincent Andrieu, Christophe Prieur
2022 J jnl
Eur. J. Control
Mattia Giaccagli, Vincent Andrieu, Sophie Tarbouriech, Daniele Astolfi
2022 J jnl
Annu. Rev. Control.
Pauline Bernard, Vincent Andrieu, Daniele Astolfi
2022 J jnl
IEEE Trans. Autom. Control.
Mattia Giaccagli, Daniele Astolfi, Vincent Andrieu, Lorenzo Marconi
2022 J jnl
CoRR
Samuele Zoboli, Daniele Astolfi, Vincent Andrieu
2022 conf
CDC
Elena Petri, Romain Postoyan, Daniele Astolfi, Dragan Nesic, Vincent Andrieu
2022 J jnl
CoRR
Elena Petri, Romain Postoyan, Daniele Astolfi, Dragan Nesic, Vincent Andrieu
2021 J jnl
IEEE Trans. Autom. Control.
Vincent Andrieu, Bayu Jayawardhana, Laurent Praly
2021 conf
CDC
Steeven Janny, Vincent Andrieu, Madiha Nadri, Christian Wolf
2021 J jnl
CoRR
Steeven Janny, Vincent Andrieu, Madiha Nadri, Christian Wolf
2021 J jnl
Autom.
Lucas Brivadis, Ludovic Sacchelli, Vincent Andrieu, Jean-Paul Gauthier, Ulysse Serres
2021 J jnl
SIAM J. Control. Optim.
Lucas Brivadis, Vincent Andrieu, Ulysse Serres, Jean-Paul Gauthier
2021 conf
CDC
Samuele Zoboli, Vincent Andrieu, Daniele Astolfi, Giacomo Casadei, Jilles Steeve Dibangoye, Madiha Nadri
2021 conf
CDC
Vincent Andrieu, Pauline Bernard
2021 conf
CDC
Tanguy Simon, Mattia Giaccagli, Jean-François Trégouët, Daniele Astolfi, Vincent Andrieu, Xuefang Lin-Shi, Hervé Morel
2020 J jnl
IEEE Trans. Autom. Control.
Alexandre Terrand-Jeanne, Vincent Andrieu, Valérie Dos Santos Martins, Cheng-Zhong Xu
2020 J jnl
IEEE Trans. Autom. Control.
Alexandre Terrand-Jeanne, Vincent Andrieu, Mélaz Tayakout-Fayolle, Valérie Dos Santos Martins
2020 conf
CDC
Mattia Giaccagli, Daniele Astolfi, Vincent Andrieu, Lorenzo Marconi
2019 J jnl
CoRR
Laurent Bako, Vincent Andrieu
2019 J jnl
Autom.
Laurent Bako, Vincent Andrieu
2019 J jnl
IEEE Trans. Autom. Control.
Pauline Bernard, Vincent Andrieu
2019 conf
CDC
Lucas Brivadis, Vincent Andrieu, Ulysse Serres
2018 J jnl
IEEE Trans. Autom. Control.
Johan Peralez, Vincent Andrieu, Madiha Nadri, Ulysse Serres
2018 J jnl
SIAM J. Control. Optim.
Pauline Bernard, Vincent Andrieu, Laurent Praly
2018 conf
CDC
Alexandre Terrand-Jeanne, Vincent Andrieu, Valérie Dos Santos Martins, Cheng-Zhong Xu
2018 conf
CDC
Laurent Bako, Vincent Andrieu
2018 J jnl
CoRR
Laurent Bako, Vincent Andrieu
2018 J jnl
Autom.
Ngoc-Tu Trinh, Vincent Andrieu, Cheng-Zhong Xu
2018 conf
ECC
Alexandre Terrand-Jeanne, Valérie Dos Santos Martins, Vincent Andrieu
2018 J jnl
IEEE Trans. Autom. Control.
Vincent Andrieu, Bayu Jayawardhana, Sophie Tarbouriech
2017 J jnl
Math. Control. Signals Syst.
Swann Marx, Vincent Andrieu, Christophe Prieur
2017 J jnl
IEEE Trans. Autom. Control.
Ngoc-Tu Trinh, Vincent Andrieu, Cheng-Zhong Xu
2017 J jnl
SIAM J. Control. Optim.
Swann Marx, Eduardo Cerpa, Christophe Prieur, Vincent Andrieu
2017 J jnl
Autom.
Pauline Bernard, Laurent Praly, Vincent Andrieu
2017 J jnl
Autom.
Pauline Bernard, Laurent Praly, Vincent Andrieu, Hassan Hammouri
2017 J jnl
IEEE Trans. Autom. Control.
Chouaib Afri, Vincent Andrieu, Laurent Bako, Pascal Dufour
2016 J jnl
Autom.
Vincent Andrieu, Christophe Prieur, Sophie Tarbouriech, Luca Zaccarian
2016 conf
CDC
Ngoc-Tu Trinh, Vincent Andrieu, Cheng-Zhong Xu
2016 J jnl
Autom.
Swann Marx, Vincent Andrieu, Christophe Prieur
2016 J jnl
IEEE Trans. Autom. Control.
Vincent Andrieu, Bayu Jayawardhana, Laurent Praly
2015 J jnl
CoRR
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2015 J jnl
Autom.
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2015 conf
CDC
Chouaib Afri, Laurent Bako, Vincent Andrieu, Pascal Dufour
2015 J jnl
CoRR
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2015 conf
SIAM Conf. on Control and its Applications
Frédéric Mazenc, Vincent Andrieu, Michael Malisoff
2015 J jnl
IEEE Trans. Autom. Control.
Thach Ngoc Dinh, Vincent Andrieu, Madiha Nadri Wolf, Ulysse Serres
2015 J jnl
Autom.
Frédéric Mazenc, Vincent Andrieu, Michael Malisoff
2015 C conf
ACC
Chouaib Afri, Vincent Andrieu, Laurent Bako, Pascal Dufour
2015 J jnl
CoRR
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2015 J jnl
CoRR
M. Sofiane Benachour, Humberto Stein Shiromoto, Vincent Andrieu
2015 conf
CDC
Vincent Andrieu, Bayu Jayawardhana, Sophie Tarbouriech
2015 J jnl
CoRR
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2015 J jnl
Autom.
Vincent Andrieu, Madiha Nadri, Ulysse Serres, Jean-Claude Vivalda
2015 conf
ECC
Swann Marx, Eduardo Cerpa, Christophe Prieur, Vincent Andrieu
2015 conf
CDC
Marc-Aurele Lagache, Ulysse Serres, Vincent Andrieu
2015 conf
CDC
Pauline Bernard, Laurent Praly, Vincent Andrieu
2015 J jnl
CoRR
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2014 J jnl
SIAM J. Control. Optim.
Vincent Andrieu
2014 conf
CDC
Vincent Andrieu, Jean-Bernard Eytard, Laurent Praly
2014 J jnl
Autom.
Sérine Damak, Michael Di Loreto, Warody Lombardi, Vincent Andrieu
2014 J jnl
Autom.
M. Sofiane Benachour, Humberto Stein Shiromoto, Vincent Andrieu
2014 C conf
ACC
Swann Marx, Vincent Andrieu, Christophe Prieur
2013 conf
TDS
Sérine Damak, Ali Ferhi, Vincent Andrieu, Michael Di Loreto, Warody Lombardi
2013 J jnl
IEEE Trans. Autom. Control.
M. Sofiane Benachour, Vincent Andrieu, Laurent Praly, Hassan Hammouri
2013 J jnl
IEEE Trans. Autom. Control.
Vincent Andrieu, Sophie Tarbouriech
2013 conf
CDC
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2013 conf
NOLCOS
M. Sofiane Benachour, Vincent Andrieu
2013 conf
CDC
Vincent Andrieu, Gildas Besançon, Ulysse Serres
2013 J jnl
Syst. Control. Lett.
Ruiyue Ouyang, Vincent Andrieu, Bayu Jayawardhana
2013 conf
CDC
Vincent Andrieu, Bayu Jayawardhana, Laurent Praly
2013 J jnl
IEEE Trans. Autom. Control.
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2012 J jnl
Int. J. Control
Mariem Sahnoun, Vincent Andrieu, Madiha Nadri
2012 J jnl
CoRR
Ruiyue Ouyang, Vincent Andrieu, Bayu Jayawardhana
2012 conf
CDC
Ruiyue Ouyang, Bayu Jayawardhana, Vincent Andrieu
2012 J jnl
Autom.
Bayu Jayawardhana, Ruiyue Ouyang, Vincent Andrieu
2011 conf
CDC/ECC
M. Sofiane Benachour, Vincent Andrieu, Laurent Praly, Hassan Hammouri
2011 C conf
ACC
Humberto Stein Shiromoto, Vincent Andrieu, Christophe Prieur
2011 conf
CDC/ECC
Bayu Jayawardhana, Ruiyue Ouyang, Vincent Andrieu
2011 J jnl
Syst. Control. Lett.
Vincent Andrieu, Christophe Prieur, Sophie Tarbouriech, Denis Arzelier
2010 conf
CDC
Vincent Andrieu
2010 conf
CDC
Vincent Andrieu, Madiha Nadri
2010 J jnl
IEEE Trans. Autom. Control.
Vincent Andrieu, Christophe Prieur
2009 J jnl
Autom.
Vincent Andrieu, Laurent Praly
2009 J jnl
Syst. Control. Lett.
Vincent Andrieu, Laurent Praly, Alessandro Astolfi
2009 J jnl
Autom.
Vincent Andrieu, Laurent Praly, Alessandro Astolfi
2009 conf
CDC
Vincent Andrieu, Laurent Praly, Alessandro Astolfi
2009 conf
CDC
Bayu Jayawardhana, Vincent Andrieu
2009 conf
CDC
Vincent Andrieu, Christophe Prieur, Sophie Tarbouriech, Denis Arzelier
2008 J jnl
IEEE Trans. Autom. Control.
Vincent Andrieu, Laurent Praly
2008 J jnl
SIAM J. Control. Optim.
Vincent Andrieu, Laurent Praly, Alessandro Astolfi
2008 B conf
ICPADS
Martin F. O'Connor, Vincent Andrieu, Mark Roantree
2008 conf
CDC
Vincent Andrieu, Christophe Prieur
2007 conf
CDC
Vincent Andrieu, Laurent Praly, Alessandro Astolfi
2006 J jnl
Syst. Control. Lett.
Vincent Andrieu, Hélène Piet-Lahanier
2006 conf
CDC
Vincent Andrieu, Laurent Praly, Alessandro Astolfi
2006 J jnl
SIAM J. Control. Optim.
Vincent Andrieu, Laurent Praly
2005 conf
CDC/ECC
Vincent Andrieu, Laurent Praly
2004 conf
CDC
Vincent Andrieu, Laurent Praly
redb/extractors/elf_extractors/elf_segments.py
← Index redb/extractors/elf_extractors/elf_segments.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 ELFSegment


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

    def _is_empty_result(self, extracted_data) -> bool:
        """
        Override: Empty segments is an ERROR, not a valid empty case.
        A valid ELF file must have segments (program headers).
        """
        # Always return False - empty segments 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_segment_type(self, p_type_str: str) -> int:
        """Map segment type string to enum value."""
        type_map = {
            'PT_NULL': 0,
            'PT_LOAD': 1,
            'PT_DYNAMIC': 2,
            'PT_INTERP': 3,
            'PT_NOTE': 4,
            'PT_SHLIB': 5,
            'PT_PHDR': 6,
            'PT_TLS': 7
        }
        return type_map.get(p_type_str, 0)

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

        if flags & 0x1:  # PF_X
            flag_strings.append('EXECUTE')
        if flags & 0x2:  # PF_W
            flag_strings.append('WRITE')
        if flags & 0x4:  # PF_R
            flag_strings.append('READ')

        return flag_strings if flag_strings else ['NONE']

    def _extract_segment_data(self, segment) -> ELFSegment:
        """Extract data from a single segment with granular error handling."""
        # Initialize with safe defaults
        segment_type = 0
        segment_type_str = 'unknown'
        segment_flags = 0
        segment_flags_str = ['NONE']
        segment_offset = 0
        segment_vaddr = 0
        segment_paddr = 0
        segment_filesz = 0
        segment_memsz = 0
        segment_align = 0
        segment_entropy = 0.0
        segment_sha256 = ""
        segment_md5 = ""

        # Try to get segment header
        header = None
        try:
            header = segment.header
        except Exception as e:
            self.log.warning(f"Could not access segment header: {e}")
            return ELFSegment(
                segment_type=segment_type, segment_type_str=segment_type_str,
                segment_flags=segment_flags, segment_flags_str=segment_flags_str,
                segment_offset=segment_offset, segment_vaddr=segment_vaddr,
                segment_paddr=segment_paddr, segment_filesz=segment_filesz,
                segment_memsz=segment_memsz, segment_align=segment_align,
                segment_entropy=segment_entropy, segment_sha256=segment_sha256,
                segment_md5=segment_md5
            )

        # Extract segment type
        try:
            p_type_str = header.get('p_type', 'PT_NULL')
            segment_type = self._map_segment_type(p_type_str)
            segment_type_str = p_type_str.replace('PT_', '') if p_type_str.startswith('PT_') else p_type_str
        except Exception as e:
            self.log.warning(f"Could not extract segment type: {e}")

        # Extract segment flags
        try:
            segment_flags = header.get('p_flags', 0)
            segment_flags_str = self._decode_segment_flags(segment_flags)
        except Exception as e:
            self.log.warning(f"Could not extract segment flags: {e}")

        # Extract segment addresses and sizes
        try:
            segment_offset = header.get('p_offset', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment offset: {e}")

        try:
            segment_vaddr = header.get('p_vaddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment vaddr: {e}")

        try:
            segment_paddr = header.get('p_paddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment paddr: {e}")

        try:
            segment_filesz = header.get('p_filesz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment filesz: {e}")

        try:
            segment_memsz = header.get('p_memsz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment memsz: {e}")

        try:
            segment_align = header.get('p_align', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment align: {e}")

        # Calculate entropy and hashes for segment data (most likely to fail)
        try:
            if segment_filesz > 0:
                segment_data = segment.data()
                if segment_data:
                    # Calculate entropy
                    segment_entropy = self._calculate_entropy(segment_data)

                    # Calculate hashes
                    segment_sha256 = hashlib.sha256(segment_data).hexdigest()
                    segment_md5 = hashlib.md5(segment_data).hexdigest()
        except Exception as e:
            self.log.warning(f"Could not read segment data for hashing: {e}")
            # Keep defaults (0.0, "", "")

        return ELFSegment(
            segment_type=segment_type,
            segment_type_str=segment_type_str,
            segment_flags=segment_flags,
            segment_flags_str=segment_flags_str,
            segment_offset=segment_offset,
            segment_vaddr=segment_vaddr,
            segment_paddr=segment_paddr,
            segment_filesz=segment_filesz,
            segment_memsz=segment_memsz,
            segment_align=segment_align,
            segment_entropy=segment_entropy,
            segment_sha256=segment_sha256,
            segment_md5=segment_md5
        )

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

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

            def extract_segments(elf):
                segments_data = []

                # Iterate through all segments with per-segment error handling
                for segment_index, segment in enumerate(elf.iter_segments()):
                    try:
                        segment_data = self._extract_segment_data(segment)
                        if segment_data:
                            segments_data.append(segment_data)
                        else:
                            self.log.warning(f"Failed to extract data for segment {segment_index}")
                    except Exception as e:
                        self.log.warning(f"Error processing segment {segment_index}: {e}")
                        # Continue processing other segments

                return segments_data

            # Check if file is valid ELF
            if not self._is_elf_file():
                self.log.error(f"No valid ELF file for {self.hash.sha256}")
                return None

            segments_data = self._with_elf_file(extract_segments)
            if segments_data is None:
                return None

            self.elf_segments = segments_data
            return self.elf_segments

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

                # Prepare data arrays for all segments
                data = []
                current_time = datetime.now(timezone.utc)
                for segment in self.elf_segments:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        segment.segment_type,
                        segment.segment_type_str,
                        segment.segment_flags,
                        segment.segment_flags_str,
                        segment.segment_offset,
                        segment.segment_vaddr,
                        segment.segment_paddr,
                        segment.segment_filesz,
                        segment.segment_memsz,
                        segment.segment_align,
                        segment.segment_entropy,
                        segment.segment_sha256,
                        segment.segment_md5,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'segment_type', 'segment_type_str', 'segment_flags', 'segment_flags_str',
                    'segment_offset', 'segment_vaddr', 'segment_paddr',
                    'segment_filesz', 'segment_memsz', 'segment_align',
                    'segment_entropy', 'segment_sha256', 'segment_md5',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    "Enum8('NULL'=0, 'LOAD'=1, 'DYNAMIC'=2, 'INTERP'=3, 'NOTE'=4, 'SHLIB'=5, 'PHDR'=6, 'TLS'=7)",
                    'LowCardinality(String)',
                    'UInt32',
                    'Array(LowCardinality(String))',
                    'UInt64', 'UInt64', 'UInt64', 'UInt64', '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_segments"