Ilia Petrov

100 papers A* 4A 3B 9C 23Misc 3Journal 24Unranked 28
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Arthur Bernhardt, David Volz, Sajjad Tamimi, Andreas Koch, Ilia Petrov
2026 J jnl
ACM Trans. Database Syst.
Arthur Bernhardt, Sajjad Tamimi, Florian Stock, Andreas Koch, Ilia Petrov
2025 J jnl
IEEE Trans. Computers
Sajjad Tamimi, Arthur Bernhardt, Florian Stock, Ilia Petrov, Andreas Koch
2025 J jnl
ACM Trans. Reconfigurable Technol. Syst.
Sajjad Tamimi, Arthur Bernhardt, Florian Stock, Ilia Petrov, Andreas Koch
2025 C conf
ADBIS
Arthur Bernhardt, Sajjad Tamimi, Florian Stock, Andreas Koch, Ilia Petrov
2025 J jnl
CoRR
Arthur Bernhardt, Sajjad Tamimi, Florian Stock, Andreas Koch, Ilia Petrov
2025 B conf
EDBT
Christian Knödler, Naeem Ramzan, Ilia Petrov
2025 conf
ADBIS (Short Papers)
Christian Knödler, Arthur Bernhardt, Naeem Ramzan, Ilia Petrov
2024 J jnl
Inf. Syst.
Christian Riegger, Ilia Petrov
2023 J jnl
Distributed Parallel Databases
Constantinos Costa, Ilia Petrov
2023 conf
ARC
Sajjad Tamimi, Arthur Bernhardt, Florian Stock, Ilia Petrov, Andreas Koch
2023 B conf
EDBT
Bernhard Mößner, Christian Riegger, Arthur Bernhardt, Ilia Petrov
2023 C conf
DaMoN
Arthur Bernhardt, Andreas Koch, Ilia Petrov
2022 Misc conf
FCCM
Sajjad Tamimi, Florian Stock, Andreas Koch, Arthur Bernhardt, Ilia Petrov
2022 B conf
EDBT
Arthur Bernhardt, Sajjad Tamimi, Florian Stock, Tobias Vinçon, Andreas Koch, Ilia Petrov
2022 J jnl
Proc. VLDB Endow.
Tobias Vinçon, Christian Knödler, Leonardo Solis-Vasquez, Arthur Bernhardt, Sajjad Tamimi, Lukas Weber, Florian Stock, Andreas Koch, Ilia Petrov
2022 J jnl
Distributed Parallel Databases
Lukas Weber, Tobias Vinçon, Christian Knödler, Leonardo Solis-Vasquez, Arthur Bernhardt, Ilia Petrov, Andreas Koch
2022 C conf
DaMoN
Tobias Vinçon, Christian Knödler, Arthur Bernhardt, Leonardo Solis-Vasquez, Lukas Weber, Andreas Koch, Ilia Petrov
2022 J jnl
CoRR
Christian Riegger, Ilia Petrov
2022 C conf
ADBIS
Christian Riegger, Ilia Petrov
2022 J jnl
VLDB J.
Tiemo Bang, Norman May, Ilia Petrov, Carsten Binnig
2022 J jnl
CoRR
Bernhard Mößner, Christian Riegger, Arthur Bernhardt, Ilia Petrov
2022 A* conf
ICDE
Arthur Bernhardt, Sajjad Tamimi, Tobias Vinçon, Christian Knödler, Florian Stock, Carsten Heinz, Andreas Koch, Ilia Petrov
2021 conf
IPDPS Workshops
Lukas Weber, Lukas Sommer, Leonardo Solis-Vasquez, Tobias Vinçon, Christian Knödler, Arthur Bernhardt, Ilia Petrov, Andreas Koch
2021 C conf
DaMoN
Christian Knödler, Tobias Vinçon, Arthur Bernhardt, Ilia Petrov, Leonardo Solis-Vasquez, Lukas Weber, Andreas Koch
2021 A conf
CIDR
Tiemo Bang, Norman May, Ilia Petrov, Carsten Binnig
2020 J jnl
CoRR
Tiemo Bang, Norman May, Ilia Petrov, Carsten Binnig
2020 B conf
EDBT
Christian Riegger, Tobias Vinçon, Robert Gottstein, Ilia Petrov
2020 conf
ICDE Workshops
Tobias Vinçon, Arthur Bernhardt, Lukas Weber, Andreas Koch, Ilia Petrov
2020 conf
SIGMOD Conference
Tiemo Bang, Ismail Oukid, Norman May, Ilia Petrov, Carsten Binnig
2020 C conf
DaMoN
Tiemo Bang, Norman May, Ilia Petrov, Carsten Binnig
2020 J jnl
CoRR
Christian Riegger, Arthur Bernhardt, Bernhard Moessner, Ilia Petrov
2020 J jnl
Proc. VLDB Endow.
Tobias Vinçon, Lukas Weber, Arthur Bernhardt, Andreas Koch, Ilia Petrov, Christian Knödler, Sergey Hardock, Sajjad Tamimi, Christian Riegger
2020 C conf
DaMoN
Tobias Vinçon, Arthur Bernhardt, Ilia Petrov, Lukas Weber, Andreas Koch
2019 ch.
Encyclopedia of Big Data Technologies
Ilia Petrov, Tobias Vinçon, Andreas Koch, Julian Oppermann, Sergey Hardock, Christian Riegger
2019 ch.
Encyclopedia of Big Data Technologies
Ilia Petrov, Andreas Koch, Tobias Vinçon, Sergey Hardock, Christian Riegger
2019 C conf
DaMoN
Sergey Hardock, Andreas Koch, Tobias Vinçon, Ilia Petrov
2019 C conf
IDEAS
Christian Riegger, Tobias Vinçon, Ilia Petrov
2019 J jnl
CoRR
Christian Riegger, Tobias Vinçon, Robert Gottstein, Ilia Petrov
2019 J jnl
CoRR
Tobias Vinçon, Andreas Koch, Ilia Petrov
2019 A* conf
ICDE
Ilia Petrov, Andreas Koch, Sergey Hardock, Tobias Vinçon, Christian Riegger
2019 C conf
ADBIS
Tobias Vinçon, Sergey Hardock, Christian Riegger, Andreas Koch, Ilia Petrov
2018 C conf
iiWAS
Christian Riegger, Tobias Vinçon, Ilia Petrov
2018 B conf
EDBT
Tobias Vinçon, Sergej Hardock, Christian Riegger, Julian Oppermann, Andreas Koch, Ilia Petrov
2017 Misc conf
BTW
Sergej Hardock, Ilia Petrov, Robert Gottstein, Alejandro P. Buchmann
2017 conf
SIGMOD Conference
Sergey Hardock, Ilia Petrov, Robert Gottstein, Alejandro P. Buchmann
2017 B conf
EDBT
Sergey Hardock, Ilia Petrov, Robert Gottstein, Alejandro P. Buchmann
2017 C conf
iiWAS
Christian Riegger, Tobias Vinçon, Ilia Petrov
2017 ed.
ACTIVE@Middleware
Mohammad Sadoghi, Ilia Petrov
2017 conf
ADMS@VLDB
Robert Gottstein, Ilia Petrov, Sergey Hardock, Alejandro P. Buchmann
2017 A* conf
ICDE
Sergey Hardock, Ilia Petrov, Robert Gottstein, Alejandro P. Buchmann
2017 C conf
iiWAS
Christian Riegger, Tobias Vinçon, Ilia Petrov
2016 conf
DEC
Christian Knödler, Bernhard Moessner, Ilia Petrov
2016 conf
DEC
Tobias Vinçon, Ilia Petrov
2016 B conf
EDBT
Sergey Hardock, Ilia Petrov, Robert Gottstein, Alejandro P. Buchmann
2016 conf
ADBIS (Short Papers and Workshops)
Tobias Vinçon, Ilia Petrov, Christian Thies
2015 A* conf
ICDE
Ilia Petrov, Robert Gottstein, Sergej Hardock
2015 Misc conf
BTW
Robert Gottstein, Rohit Goyal, Ilia Petrov, Sergey Hardock, Alejandro P. Buchmann
2015 B conf
EDBT
Sergey Hardock, Ilia Petrov, Robert Gottstein, Alejandro P. Buchmann
2015 C conf
iiWAS
Justus Bogner, Carolin Dehner, Tobias Vinçon, Ilia Petrov
2014 ch.
Computational Intelligence for Decision Support in Cyber-Physical Systems
Khalid Nawaz, Ilia Petrov, Alejandro P. Buchmann
2014 C conf
IDEAS
Robert Gottstein, Rohit Goyal, Sergej Hardock, Ilia Petrov, Alejandro P. Buchmann
2014 C conf
KEOD
Bilal Gonen, Xingang Fang, Eman El-Sheikh, Sikha Bagui, Norman Wilde, Alfred Zimmermann, Ilia Petrov
2014 B conf
EDBT
Robert Gottstein, Thorsten Peter, Ilia Petrov, Alejandro P. Buchmann
2013 C conf
IDEAS
Goetz Graefe, Ilia Petrov, Todor Ivanov, Veselin Marinov
2013 conf
BNCOD
Robert Gottstein, Ilia Petrov, Alejandro P. Buchmann
2013 J jnl
Int. J. Data Warehous. Min.
Goetz Graefe, Anisoara Nica, Knut Stolze, Thomas Neumann, Todd Eavis, Ilia Petrov, Elaheh Pourabbas, David Fekete
2013 conf
ADMS@VLDB
Paul Dubs, Ilia Petrov, Robert Gottstein, Alejandro P. Buchmann
2013 J jnl
Proc. VLDB Endow.
Sergey Hardock, Ilia Petrov, Robert Gottstein, Alejandro P. Buchmann
2013 C conf
IDEAS
Robert Gottstein, Ilia Petrov, Alejandro P. Buchmann
2013 conf
EDOC Workshops
Alfred Zimmermann, Michael Pretz, Gertrud Zimmermann, Donald G. Firesmith, Ilia Petrov
2012 J jnl
Int. J. Data Warehous. Min.
Todor Ivanov, Ilia Petrov, Alejandro P. Buchmann
2012 conf
GI-Jahrestagung
Ilia Petrov, Daniel Bausch, Robert Gottstein, Alejandro P. Buchmann
2012 C conf
DaMoN
Daniel Bausch, Ilia Petrov, Alejandro P. Buchmann
2011 conf
DEXA Workshops
Daniel Bausch, Ilia Petrov, Alejandro P. Buchmann
2011 J jnl
J. Inf. Data Manag.
Ilia Petrov, Robert Gottstein, Todor Ivanov, Daniel Bausch, Alejandro P. Buchmann
2011 conf
TPCTC
Robert Gottstein, Ilia Petrov, Alejandro P. Buchmann
2011 ch.
Grid and Cloud Database Management
Ilia Petrov, Vyacheslav Polonskyy, Alejandro P. Buchmann
2010 conf
From Active Data Management to Event-Based Systems and More
Sebastian Frischbier, Ilia Petrov
2010 conf
ADMS@VLDB
Ilia Petrov, Guillermo G. Almeida, Alejandro P. Buchmann, Ulrich Gräf
2010 conf
ICSOC Workshops
Alejandro P. Buchmann, Hans-Christian Pfohl, Stefan Appel, Tobias Freudenreich, Sebastian Frischbier, Ilia Petrov, Christian Zuber
2010 ed.
From Active Data Management to Event-Based Systems and More
Kai Sachs, Ilia Petrov, Pablo Ezequiel Guerrero
2010 conf
SBBD (Posters)
Ilia Petrov, Todor Ivanov, Alejandro P. Buchmann
2010 conf
From Active Data Management to Event-Based Systems and More
Daniel Jacobi, Pablo Ezequiel Guerrero, Khalid Nawaz, Christian Seeger, Arthur Herzog, Kristof Van Laerhoven, Ilia Petrov
2008 conf
OTM Conferences (1)
Ilia Petrov, Gabor Nemes
2008 C conf
iiWAS
Ilia Petrov, Alejandro P. Buchmann
2006 C conf
iiWAS
Ilia Petrov
2005 A conf
CAiSE
Ilia Petrov, Stefan Jablonski, Marc Holze
2004 C conf
iiWAS
Ilia Petrov, Stefan Jablonski
2004 C conf
iiWAS
Ilia Petrov, Stefan Jablonski
2004 J jnl
HMD Prax. Wirtsch.
Stefan Jablonski, Christian Meiler, Ilia Petrov
2004 conf
OTM Workshops
Ilia Petrov, Stefan Jablonski, Marc Holze
2004 conf
ICWI
Ilia Petrov, Stefan Jablonski, Marc Holze
2004 J jnl
HMD Prax. Wirtsch.
Stefan Jablonski, Christian Meiler, Ilia Petrov
2004 A conf
ER
Ilia Petrov, Stefan Jablonski, Marc Holze, Gabor Nemes, Marcus Schneider
2003 conf
ICEIS (1)
Stefan Jablonski, Ilia Petrov, Christian Meiler
2003 conf
CAiSE Short Paper Proceedings
Stefan Jablonski, Ilia Petrov, Christian Meiler, Udo Mayer
2003 J jnl
HMD Prax. Wirtsch.
Stefan Jablonski, Christian Meiler, Ilia Petrov
2002 conf
Promise
Stefan Jablonski, Ilia Petrov, Christian Meiler
2002 conf
ICWI
Stefan Jablonski, Ilia Petrov, Christian Meiler
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"