Karsten Weihe

68 papers A* 5A 7B 5C 2Journal 28Unranked 20
YearRankTypeTitle / Venue / Authors
2023 J jnl
IEEE Trans. Educ.
Svana Esche, Karsten Weihe
2023 conf
ITiCSE (1)
Svana Esche, Karsten Weihe
2020 J jnl
Public Transp.
Felix Gündling, Florian Hopp, Karsten Weihe
2017 J jnl
Transp. Sci.
Mohammad H. Keyhani, Mathias Schnee, Karsten Weihe
2017 A conf
ALENEX
Michael Stein, Karsten Weihe, Augustin Wilberg, Roland Kluge, Julian M. Klomp, Mathias Schnee, Lin Wang, Max Mühlhäuser
2017 conf
WWW (Companion Volume)
Thomas Arnold, Johannes Daxenberger, Iryna Gurevych, Karsten Weihe
2016 conf
CSNDSP
Michael Stein, Dominic Lerbs, Mohamed Hassan, Mathias Schnee, Immanuel Schweizer, Karsten Weihe, Max Mühlhäuser
2016 conf
WASSA@NAACL-HLT
Zheng Ma, Jinseok Nam, Karsten Weihe
2016 conf
TextGraphs@NAACL-HLT
Thomas Arnold, Karsten Weihe
2015 ch.
Gems of Combinatorial Optimization and Graph Algorithms
Karsten Weihe
2014 conf
KONVENS
Jinseok Nam, Christian Kirschner, Zheng Ma, Nicolai Erbs, Susanne Neumann, Daniela Oelke, Steffen Remus, Chris Biemann, Judith Eckle-Kohler, Johannes Fürnkranz, Iryna Gurevych, Marc Rittberger, Karsten Weihe
2012 B conf
COLING
Chris Biemann, Stefanie Roos, Karsten Weihe
2012 C conf
ATMOS
Mohammad H. Keyhani, Mathias Schnee, Karsten Weihe, Hans-Peter Zorn
2010 J jnl
CoRR
Christoph Fretter, Lachezar Krumov, Karsten Weihe, Matthias Müller-Hannemann, Marc-Thorsten Hütt
2009 J jnl
ACM J. Exp. Algorithmics
Alaubek Avdil, Karsten Weihe
2008 conf
Lebenslanges Lernen in der Informatik
Karsten Weihe
2007 A* conf
SODA
Jan M. Hochstein, Karsten Weihe
2006 J jnl
Theor. Comput. Sci.
Matthias Müller-Hannemann, Karsten Weihe
2006 J jnl
Ann. Oper. Res.
Matthias Müller-Hannemann, Karsten Weihe
2006 conf
WEA
Siamak Tazari, Matthias Müller-Hannemann, Karsten Weihe
2005 A conf
CP
Roland Martin, Karsten Weihe
2004 J jnl
J. ACM
Jan M. Hochstein, Karsten Weihe
2004 conf
IWPEC
Matthias Müller-Hannemann, Karsten Weihe
2002 C conf
ATMOS
Matthias Müller-Hannemann, Mathias Schnee, Karsten Weihe
2001 J jnl
ACM Comput. Surv.
Karsten Weihe
2001 conf
WAE
Matthias Müller-Hannemann, Karsten Weihe
2000 J jnl
ACM J. Exp. Algorithmics
Frank Schulz, Dorothea Wagner, Karsten Weihe
2000 J jnl
Softw. Pract. Exp.
Dorothea Wagner, Karsten Weihe
2000 conf
WAE
Karsten Weihe
2000 J jnl
Int. J. Found. Comput. Sci.
Annegret Liebers, Dorothea Wagner, Karsten Weihe
2000 J jnl
Int. J. Comput. Geom. Appl.
Matthias Müller-Hannemann, Karsten Weihe
2000 conf
WAE
Annegret Liebers, Karsten Weihe
2000 J jnl
Algorithmica
Karsten Weihe, Thomas Willhalm
1999 J jnl
Discret. Appl. Math.
Ulrik Brandes, Wolfram Schlickenrieder, Gabriele Neyer, Dorothea Wagner, Karsten Weihe
1999 conf
WAE
Frank Schulz, Dorothea Wagner, Karsten Weihe
1999 A* conf
FOCS
Karsten Weihe
1999 conf
SCG
Karsten Weihe, Ulrik Brandes, Annegret Liebers, Matthias Müller-Hannemann, Dorothea Wagner, Thomas Willhalm
1999 B conf
WG
Annegret Liebers, Dorothea Wagner, Karsten Weihe
1998 J jnl
ACM SIGPLAN Notices
Dieter Gluche, Dietmar Kühl, Karsten Weihe
1998 J jnl
Inform. Forsch. Entwickl.
Karsten Weihe
1998 conf
Generic Programming
Ullrich Köthe, Karsten Weihe
1998 conf
WAE
Karsten Weihe, Thomas Willhalm
1997 J jnl
J. Algorithms
Karsten Weihe
1997 conf
WAE
Dietmar Kühl, Marco Nissen, Karsten Weihe
1997 A conf
ESA
Matthias Müller-Hannemann, Karsten Weihe
1997 J jnl
J. Comput. Syst. Sci.
Karsten Weihe
1997 J jnl
J. ACM
Rolf H. Möhring, Matthias Müller-Hannemann, Karsten Weihe
1997 conf
SCG
Matthias Müller-Hannemann, Karsten Weihe
1997 J jnl
Algorithmica
Karsten Weihe
1997 A conf
ESA
Karsten Weihe, Thomas Willhalm
1997 A conf
OOPSLA
Karsten Weihe
1997 J jnl
SIAM J. Comput.
Heike Ripphausen-Lipa, Dorothea Wagner, Karsten Weihe
1996 J jnl
Inform. Spektrum
Annegret Liebers, Dorothea Wagner, Karsten Weihe
1996 J jnl
Int. J. Found. Comput. Sci.
Heike Ripphausen-Lipa, Dorothea Wagner, Karsten Weihe
1995 J jnl
Comb.
Dorothea Wagner, Karsten Weihe
1995 conf
SCG
Dorothea Wagner, Karsten Weihe
1995 J jnl
Math. Methods Oper. Res.
M. Seetharama Gowda, Karsten Weihe
1995 A* conf
SODA
Rolf H. Möhring, Matthias Müller-Hannemann, Karsten Weihe
1994 A conf
ESA
Karsten Weihe
1994 A* conf
FOCS
Karsten Weihe
1994 J jnl
IEEE Trans. Computers
Majid Sarrafzadeh, Dorothea Wagner, Frank Wagner, Karsten Weihe
1993 A conf
ESA
Dorothea Wagner, Karsten Weihe
1993 J jnl
ZOR Methods Model. Oper. Res.
M. Schäffter, Karsten Weihe, Petra Mutzel, Salah E. Elmaghraby
1993 conf
Combinatorial Optimization
Heike Ripphausen-Lipa, Dorothea Wagner, Karsten Weihe
1993 B conf
ISAAC
Heike Ripphausen-Lipa, Dorothea Wagner, Karsten Weihe
1993 B conf
ISAAC
Karsten Weihe
1993 A* conf
SODA
Heike Ripphausen-Lipa, Dorothea Wagner, Karsten Weihe
1992 B conf
ISAAC
Majid Sarrafzadeh, Dorothea Wagner, Frank Wagner, Karsten Weihe
redb/extractors/macho_extractors/macho_exports.py
← Index redb/extractors/macho_extractors/macho_exports.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachOExport


class MachOExportExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_exports"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.MACHO_EXPORT.value

    def _extract_exports(self, arch_name=None):
        """Extract export information from the MachO binary for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get exported symbols using new API for specific architecture
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)

            # Extract all exported symbols (may be empty for some binaries)
            # Handle None or empty dict
            if not exported_symbols:
                exported_symbols = {}
            all_symbols = []
            for dylib_name, symbols in exported_symbols.items():
                # Process symbol names
                for symbol in symbols:
                    if isinstance(symbol, bytes):
                        symbol = symbol.decode('utf-8', errors='replace')
                    all_symbols.append(symbol)

            # Create export dataclass
            macho_export = MachOExport(
                macho_exports_total=len(all_symbols),
                macho_export_symbols=all_symbols  # Empty list is fine, but None is not allowed for Array type
            )

            return macho_export

        except Exception as e:
            self.log.error(f"Error extracting MachO exports for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Get architectures (macho is already parsed in base class)
            architectures = self.macho.get_architectures()
            if len(architectures) > 1:
                # FAT binary - return list of exports for each architecture
                results = []
                for arch_name in architectures:
                    exports = self._extract_exports(arch_name)
                    if exports:
                        exports.arch_identifier = arch_name
                        results.append(exports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_exports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO exports: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get exports for this architecture
                macho_export = self._extract_exports(arch_name)
                if not macho_export:
                    continue

                data.append([
                    arch_sha256,                          # sha256 (arch-specific)
                    macho_export.macho_exports_total,     # macho_exports_total
                    macho_export.macho_export_symbols,    # macho_export_symbols (keep as array!)
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256',
                'macho_exports_total', 'macho_export_symbols',
                'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'UInt32', 'Array(Nullable(String))',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

    def get_clickhouse_table(self) -> str:
        return "redb_macho_exports"