Ralf Heese

30 papers B 3Misc 1Journal 8Unranked 16
YearRankTypeTitle / Venue / Authors
2019 J jnl
J. Web Semant.
Annika Hinze, Ralf Heese, Alexa Schlegel, Adrian Paschke
2016
Ralf Heese
2012 B conf
TPDL
Dana McKay, Annika Hinze, Ralf Heese, Nicholas Vanderschantz, Claire Timpany, Sally Jo Cunningham
2012 conf
ISWC (1)
Annika Hinze, Ralf Heese, Markus Luczak-Rösch, Adrian Paschke
2012 B conf
TPDL
Annika Hinze, Ralf Heese, Alexa Schlegel, Markus Luczak-Rösch
2012 conf
GI-Jahrestagung
Alexa Schlegel, Ralf Heese, Annika Hinze
2010 J jnl
Datenbank-Spektrum
Ralf Heese, Gökhan Coskun, Markus Luczak-Rösch, Radoslaw Oldakowski, Adrian Paschke, Ralph Schäfermeier, Olga Streibel
2010 conf
SFSW
Ralf Heese, Markus Luczak-Rösch, Adrian Paschke, Radoslaw Oldakowski, Olga Streibel
2010 conf
SWAT4LS
Richard Huber, Kirsten Hantelmann, Alexandru Todor, Sebastian Krebs, Ralf Heese, Adrian Paschke
2010 J jnl
CoRR
Richard Huber, Kirsten Hantelmann, Alexandru Todor, Sebastian Krebs, Ralf Heese, Adrian Paschke
2009 conf
I-SEMANTICS
Adrian Paschke, Kia Teymourian, Ralf Heese, Markus Luczac-Rösch
2009 conf
I-SEMANTICS
Gökhan Coskun, Markus Luczak-Rösch, Ralf Heese, Adrian Paschke
2009 conf
LDOW
Markus Luczak-Rösch, Ralf Heese
2009 ch.
Networked Knowledge - Networked Media - Integrating Knowledge Management
Markus Luczak-Rösch, Ralf Heese
2009 J jnl
i-com
Markus Luczak-Rösch, Ralf Heese, Adrian Paschke
2009 conf
I-SEMANTICS
Gökhan Coskun, Ralf Heese, Markus Luczak-Rösch, Radoslaw Oldakowski, Adrian Paschke, Ralph Schäfermeier, Olga Streibel
2008 conf
SemWiki
Markus Luczak-Rösch, Ralf Heese
2007 B conf
ESWC
Olaf Hartig, Ralf Heese
2006 conf
ER (Workshops)
Sven Herschel, Ralf Heese, Jens Bleiholder
2006 J jnl
J. Data Semant.
Sven Herschel, Ralf Heese, Jens Bleiholder, Christian Czekay
2006 conf
ER (Workshops)
Ralf Heese
2006 J jnl
Wirtschaftsinf.
Robert Tolksdorf, Malgorzata Mochól, Ralf Heese, Rainer Eckstein, Radoslaw Oldakowski, Christian Bizer
2006 J jnl
Inform. Spektrum
Thorsten Falk, Ralf Heese, Christian M. Kaspar, Malgorzata Mochól, Daniel Pfeiffer, Michael Thygs, Robert Tolksdorf
2005 Misc conf
BTW
Ralf Heese, Sven Herschel, Felix Naumann, Armin Roth
2005 conf
Wirtschaftsinformatik
Christian Bizer, Ralf Heese, Malgorzata Mochól, Radoslaw Oldakowski, Robert Tolksdorf, Rainer Eckstein
2004 conf
Grundlagen von Datenbanken
Ralf Heese
2004 conf
GI Jahrestagung (2)
Malgorzata Mochól, Radoslaw Oldakowski, Ralf Heese
2004 J jnl
Comput. Syst. Sci. Eng.
Robert Tolksdorf, Christian Bizer, Rainer Eckstein, Ralf Heese
2003 conf
WWW (Posters)
Robert Tolksdorf, Christian Bizer, Ralf Heese
2003 conf
OTM Workshops
Robert Tolksdorf, Christian Bizer, Rainer Eckstein, Ralf Heese
redb/extractor_registry.py
← Index redb/extractor_registry.py python
"""
Extractor registry with lazy loading by file type.

Groups extractors by file type (pe, elf, macho, apk) and only imports
the relevant group when that file type is first encountered. This avoids
loading heavy dependencies (pefile, lief, androguard, etc.) into workers
that don't need them.
"""
import importlib
import logging

logger = logging.getLogger(__name__)

# Registry: group name -> list of (module_path, class_names)
_REGISTRY = {
    "pe": [
        ("redb.extractors.pe_extractors", [
            "PEFeaturesExtractor",
            "PEImportExtractor",
            "PEResourceExtractor",
            "PEOverlayExtractor",
            "PESectionExtractor",
            "PESignatureExtractor",
            "PEExtraFindings",
            "PEInconstistencyTestsExtractor",
            "PEDotNetExtractor",
        ]),
    ],
    "elf": [
        ("redb.extractors.elf_extractors", [
            "ELFFeaturesExtractor",
            "ELFSegmentExtractor",
            "ELFSectionExtractor",
            "ELFDependencyExtractor",
            "ELFSymbolExtractor",
            "ELFImportExtractor",
            "ELFExportExtractor",
            "ELFRelocationExtractor",
            "ELFNotesExtractor",
        ]),
    ],
    "macho": [
        ("redb.extractors.macho_extractors", [
            "MachOFeaturesExtractor",
            "MachOSegmentExtractor",
            "MachOImportExtractor",
            "MachOExportExtractor",
            "MachODylibExtractor",
            "MachOSignatureExtractor",
        ]),
    ],
    "apk": [
        ("redb.extractors.apk_extractors", [
            "APKFeaturesExtractor",
            "APKManifestExtractor",
            "APKPermissionsExtractor",
            "APKSignatureExtractor",
            "APKDexExtractor",
            "APKResourceExtractor",
            "APKNativeLibExtractor",
            "APKInconsistencyTestsExtractor",
        ]),
        ("redb.extractors.decompiler.DecompileAPK", [
            "DecompileAPK",
        ]),
    ],
    "js": [
        ("redb.extractors.js_extractors", [
            "JSFeaturesExtractor",
            "JSSuspiciousAPIsExtractor",
            "JSStringsExtractor",
            "JSDeobfuscationExtractor",
            "JSContentExtractor",
        ]),
    ],
}

# Map filetype labels (from Magika) to registry group names
FILETYPE_TO_GROUP = {
    "pebin": "pe",
    "elf": "elf",
    "macho": "macho",
    "apk": "apk",
    "javascript": "js",
}

# Cache: group name -> {class_name: class}
_group_cache = {}


def _load_group(group_name):
    """Import all extractors for a group. Cached after first call."""
    if group_name in _group_cache:
        return _group_cache[group_name]

    logger.debug(f"Loading extractor group: {group_name}")

    # Suppress androguard logging before importing APK extractors
    if group_name == "apk":
        from loguru import logger as loguru_logger
        loguru_logger.disable("androguard")

    classes = {}
    for module_path, class_names in _REGISTRY[group_name]:
        mod = importlib.import_module(module_path)
        for name in class_names:
            classes[name] = getattr(mod, name)

    _group_cache[group_name] = classes
    return classes


def get_filetype_modules(filetype):
    """Get the list of format-specific extractor classes for a filetype.

    Returns only analysis extractors (excludes decompilers like DecompileAPK).
    """
    group = FILETYPE_TO_GROUP.get(filetype)
    if not group:
        return []
    classes = _load_group(group)
    return [cls for name, cls in classes.items() if not name.startswith("Decompile")]


def get_extractor_class(name):
    """Look up a single extractor class by name across all groups.

    Checks cached groups first, then loads groups on demand.
    """
    # Check already-loaded groups first
    for group_classes in _group_cache.values():
        if name in group_classes:
            return group_classes[name]

    # Search all groups (triggers lazy loading)
    for group_name in _REGISTRY:
        classes = _load_group(group_name)
        if name in classes:
            return classes[name]

    return None