Rainer Kolisch

42 papers Journal 41
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Prod. Res.
Fotios Petropoulos, Henk Akkermans, O. Zeynep Aksin, Imran Ali, Mohamed Zied Babai, Ana Barbosa-Póvoa, Olga Battaïa, Maria Besiou, Nils Boysen, Stephen Brammer, Alistair Brandon-Jones, Dirk Briskorn, Tyson R. Browning, Paul Buijs, Piera Centobelli, Andrea Chiarini, Paul Cousins, Elizabeth A. Cudney, Andrew Davies, Steven J. Day, René de Koster, Rommert Dekker, Juliano Denicol, Mélanie Despeisse, Stephen M. Disney, Alexandre Dolgui, Linh Duong, Malek El-Qallali, Behnam Fahimnia, Fatemeh Fakhredin, Stanley B. Gershwin, Salar Ghamat, Vaggelis Giannikas, Christoph H. Glock, Janet Godsell, Kannan Govindan, Claire Hannibal, Anders Haug, Tomislav Hernaus, Juliana Hsuan, Dmitry Ivanov, Marianne Jahre, Björn Johansson, Madan Shankar Kalidoss, Argyris Kanellopoulos, Devika Kannan, Elif Karul, Konstantinos V. Katsikopoulos, Ayse Begüm Kilic-Ararat, Rainer Kolisch, Maximilian Koppenberg, Maneesh Kumar, Yong-Hong Kuo, Andrew Kusiak, Michael A. Lewis, Stanley Frederick W. T. Lim, Veronique Limère, Jiyin Liu, Omid Maghazei, Matija Maric, Joern Meissner, Miranda Meuwissen, Pietro Micheli, Samudaya Nanayakkara, Bengü Nur Özdemir, Thanos Papadopoulos, Stephen Pavelin, Srinath Perera, Wendy Phillips, Dennis Prak, Hubert Pun, Sharfah Ahmad Qazi, Usha Ramanathan, Gerald Reiner, Ewout Reitsma, Jens K. Roehrich, Nada R. Sanders, Joseph Sarkis, Nico André Schmid, Christoph G. Schmidt, Andreas Schroeder, Kostas Selviaridis, Stefan Seuring, Chuan Shi, Byung-Gak Son, Martin Spring, Brian Squire, Wendy van der Valk, Dirk Pieter van Donk, Geert-Jan van Houtum, Miriam Wilhelm, Finn Wynstra, Ting Zheng
2025 J jnl
Eur. J. Oper. Res.
O. Baturhan Bayraktar, Martin Grunow, Rainer Kolisch
2025 J jnl
CoRR
Fotios Petropoulos, Henk Akkermans, O. Zeynep Aksin, Imran Ali, Mohamed Zied Babai, Ana Barbosa-Póvoa, Olga Battaïa, Maria Besiou, Nils Boysen, Stephen Brammer, Alistair Brandon-Jones, Dirk Briskorn, Tyson R. Browning, Paul Buijs, Piera Centobelli, Andrea Chiarini, Paul Cousins, Elizabeth A. Cudney, Andrew Davies, Steven J. Day, René de Koster, Rommert Dekker, Juliano Denicol, Mélanie Despeisse, Stephen M. Disney, Alexandre Dolgui, Linh Duong, Malek El-Qallali, Behnam Fahimnia, Fatemeh Fakhredin, Stanley B. Gershwin, Salar Ghamat, Vaggelis Giannikas, Christoph H. Glock, Janet Godsell, Kannan Govindan, Claire Hannibal, Anders Haug, Tomislav Hernaus, Juliana Hsuan, Dmitry Ivanov, Marianne Jahre, Björn Johansson, Madan Shankar Kalidoss, Argyris Kanellopoulos, Devika Kannan, Elif Karul, Konstantinos V. Katsikopoulos, Ayse Begüm Kilic-Ararat, Rainer Kolisch, Maximilian Koppenberg, Maneesh Kumar, Yong-Hong Kuo, Andrew Kusiak, Michael A. Lewis, Stanley Frederick W. T. Lim, Veronique Limère, Jiyin Liu, Omid Maghazei, Matija Maric, Joern Meissner, Miranda Meuwissen, Pietro Micheli, Samudaya Nanayakkara, Bengü Nur Özdemir, Thanos Papadopoulos, Stephen Pavelin, Srinath Perera, Wendy Phillips, Dennis Prak, Hubert Pun, Sharfah Ahmad Qazi, Usha Ramanathan, Gerald Reiner, Ewout Reitsma, Jens K. Roehrich, Nada R. Sanders, Joseph Sarkis, Nico André Schmid, Christoph G. Schmidt, Andreas Schroeder, Kostas Selviaridis, Stefan Seuring, Chuan Shi, Byung-Gak Son, Martin Spring, Brian Squire, Wendy van der Valk, Dirk Pieter van Donk, Geert-Jan van Houtum, Miriam Wilhelm, Finn Wynstra, Ting Zheng
2025 J jnl
CoRR
Giacomo Dall'olio, Rainer Kolisch, Yaoxin Wu
2024 J jnl
Transp. Sci.
Gregor Godbersen, Rainer Kolisch, Maximilian Schiffer
2024 J jnl
Ann. Oper. Res.
Philipp Melchiors, Rainer Kolisch, John J. Kanet
2023 J jnl
Transp. Sci.
Giacomo Dall'olio, Rainer Kolisch
2023 J jnl
Eur. J. Oper. Res.
Christian M. M. Frey, Alexander Jungwirth, Markus M. Frey, Rainer Kolisch
2022 J jnl
Transp. Sci.
Christian Ruf, Sebastian Schiffels, Rainer Kolisch, Markus M. Frey
2022 J jnl
Eur. J. Oper. Res.
Christian Jost, Alexander Jungwirth, Rainer Kolisch, Sebastian Schiffels
2022 J jnl
Eur. J. Oper. Res.
Thomas Hagspihl, Rainer Kolisch, Christian Ruf, Sebastian Schiffels
2022 J jnl
INFORMS J. Comput.
Alexander Jungwirth, Guy Desaulniers, Markus M. Frey, Rainer Kolisch
2022 J jnl
Manuf. Serv. Oper. Manag.
Tobias Lieberum, Sebastian Schiffels, Rainer Kolisch
2022 J jnl
Eur. J. Oper. Res.
Maximilian Pohl, Christian Artigues, Rainer Kolisch
2022 J jnl
Int. J. Prod. Res.
Christian Ruf, Jonathan F. Bard, Rainer Kolisch
2019 J jnl
Eur. J. Oper. Res.
Martin Fink, Guy Desaulniers, Markus M. Frey, Ferdinand Kiermaier, Rainer Kolisch, François Soumis
2019 J jnl
Eur. J. Oper. Res.
Claus-Henning Brech, Andreas T. Ernst, Rainer Kolisch
2018 J jnl
Int. J. Prod. Res.
Philipp Melchiors, Roel Leus, Stefan Creemers, Rainer Kolisch
2018 J jnl
Decis. Sci.
Sebastian Schiffels, Thomas Fliedner, Rainer Kolisch
2017 J jnl
Eur. J. Oper. Res.
Martin Tritschler, Anulark Naber, Rainer Kolisch
2017 ch.
50 Jahre Universitäts-Informatik in München
Susanne Albers, Martin Bichler, Felix Brandt, Peter Gritzmann, Rainer Kolisch
2017 J jnl
Inform. Spektrum
Susanne Albers, Martin Bichler, Felix Brandt, Peter Gritzmann, Rainer Kolisch
2017 J jnl
Transp. Sci.
Markus M. Frey, Rainer Kolisch, Christian Artigues
2017 J jnl
Transp. Sci.
Markus M. Frey, Ferdinand Kiermaier, Rainer Kolisch
2016 J jnl
Comput. Oper. Res.
Rainer Kolisch, Jens O. Brunner, Jesper Larsen
2016 J jnl
OR Spectr.
Rainer Kolisch, Erik Demeulemeester, Rubén Ruiz García, Vincent T'kindt, Jan Weglarz
2015 J jnl
INFORMS J. Comput.
Daniel Gartner, Rainer Kolisch, Daniel B. Neill, Rema Padman
2015 J jnl
OR Spectr.
Rainer Kolisch, André Dahlmann
2014 J jnl
OR Spectr.
Rainer Kolisch
2014 J jnl
Eur. J. Oper. Res.
Anulark Naber, Rainer Kolisch
2014 J jnl
Eur. J. Oper. Res.
Andreas Fügener, Erwin W. Hans, Rainer Kolisch, Nikky Kortbeek, Peter T. Vanberkel
2014 J jnl
Eur. J. Oper. Res.
Daniel Gartner, Rainer Kolisch
2013 J jnl
Ann. Oper. Res.
Hans-Jörg Schütz, Rainer Kolisch
2012 J jnl
Eur. J. Oper. Res.
Hans-Jörg Schütz, Rainer Kolisch
2012 J jnl
OR Spectr.
Michael W. Carter, Erwin W. Hans, Rainer Kolisch
2010 J jnl
OR Spectr.
Christian Heimerl, Rainer Kolisch
2008 J jnl
OR Spectr.
Rainer Kolisch, Sabine Sickinger
2006 J jnl
Eur. J. Oper. Res.
Rainer Kolisch, Sönke Hartmann
2000 J jnl
Eur. J. Oper. Res.
Sönke Hartmann, Rainer Kolisch
2000 J jnl
OR Spectr.
Rainer Kolisch, Marcus Brandenburg, Claus Krüger
1999 J jnl
Interfaces
Rainer Kolisch
1996 J jnl
Wirtschaftsinf.
Rainer Kolisch, Kai Hempel
redb/extractors/elf_extractors/elf_exports.py
← Index redb/extractors/elf_extractors/elf_exports.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Set

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 ELFExport


class ELFExportExtractor(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_exports = None
        self.elastic_index = self.index_prefix + "-elf_exports"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_exported_functions_from_symbols(self, elf) -> Set[str]:
        """Extract exported functions from symbol tables."""
        exported_functions = set()

        try:
            # Check both static (.symtab) and dynamic (.dynsym) symbol tables
            symbol_sections = ['.symtab', '.dynsym']

            for section_name in symbol_sections:
                section = elf.get_section_by_name(section_name)
                if not section or not hasattr(section, 'iter_symbols'):
                    continue

                for symbol in section.iter_symbols():
                    # Check if symbol is exported (defined and globally visible)
                    if (symbol.name and
                        symbol.entry.get('st_shndx', 0) != 'SHN_UNDEF' and  # Not undefined
                        symbol.entry.get('st_info', {}).get('bind') in ['STB_GLOBAL', 'STB_WEAK'] and  # Global or weak binding
                        symbol.entry.get('st_info', {}).get('type') in ['STT_FUNC', 'STT_OBJECT']):  # Function or object

                        # Additional checks for meaningful exports
                        if (symbol.entry.get('st_value', 0) > 0 or  # Has a value
                            symbol.entry.get('st_size', 0) > 0):    # Has a size
                            exported_functions.add(symbol.name)

        except Exception as e:
            self.log.error(f"Error extracting exported functions from symbols: {e}")

        return exported_functions

    def _get_exported_functions_from_dynamic_section(self, elf) -> Set[str]:
        """Extract exported functions information from dynamic section."""
        exported_functions = set()

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                return exported_functions

            # Look for version definition sections that might indicate exports
            # This is complementary to symbol table analysis
            for tag in dynamic_section.iter_tags():
                if tag.entry.d_tag == 'DT_SONAME':
                    # If it has a SONAME, it's likely a shared library with exports
                    # The actual exports are still found in symbol tables
                    pass

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

        return exported_functions

    def _filter_meaningful_exports(self, exports: Set[str]) -> Set[str]:
        """Filter out compiler-generated and internal symbols to focus on meaningful exports."""
        filtered_exports = set()

        # Common patterns to exclude (compiler-generated, internal symbols)
        exclude_patterns = [
            '_start',
            '_init',
            '_fini',
            '__libc_',
            '__gmon_start__',
            '_IO_stdin_used',
            '__data_start',
            '__bss_start',
            '_edata',
            '_end',
            '__TMC_END__',
            '_ITM_deregisterTMCloneTable',
            '_ITM_registerTMCloneTable',
            '__cxa_finalize',
            '__gxx_personality_v0',
            '_Jv_RegisterClasses'
        ]

        for export in exports:
            # Skip empty or very short names
            if not export or len(export) < 2:
                continue

            # Skip symbols that match exclude patterns
            skip = False
            for pattern in exclude_patterns:
                if export.startswith(pattern):
                    skip = True
                    break

            # Skip symbols that look like internal mangled names (but keep reasonable C++ names)
            if export.startswith('_Z') and len(export) > 50:  # Very long mangled names
                skip = True

            if not skip:
                filtered_exports.add(export)

        return filtered_exports

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

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

            def extract_data(elf):
                # Extract exported functions from multiple sources
                exported_functions = set()

                # From symbol tables (primary source)
                symbol_exports = self._get_exported_functions_from_symbols(elf)
                exported_functions.update(symbol_exports)

                # From dynamic section (supplementary)
                dynamic_exports = self._get_exported_functions_from_dynamic_section(elf)
                exported_functions.update(dynamic_exports)

                # Filter out compiler-generated and internal symbols
                meaningful_exports = self._filter_meaningful_exports(exported_functions)

                # Convert to sorted list for consistent output
                export_functions_list = sorted(list(meaningful_exports))

                # Return ELFExport dataclass
                return ELFExport(
                    elf_exports_total=len(export_functions_list),
                    elf_export_functions=export_functions_list,
                )

            if not self._is_elf_file():
                return None

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

            self.elf_exports = result
            return self.elf_exports

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

                # Prepare data array
                data = [[
                    self.sha256,
                    self.md5,
                    self.sha1,
                    self.elf_exports.elf_exports_total,
                    self.elf_exports.elf_export_functions,
                    datetime.now(timezone.utc)
                ]]

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'elf_exports_total',
                    'elf_export_functions',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt32',
                    'Array(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_exports"