Vasileios Karakasis

22 papers A 3B 3C 3Journal 8Unranked 5
YearRankTypeTitle / Venue / Authors
2021 J jnl
Parallel Comput.
Andreas Jocksch, Noé Ohana, Emmanuel Lanti, Eirini Koutsaniti, Vasileios Karakasis, Laurent Villard
2020 J jnl
Concurr. Comput. Pract. Exp.
Maxime Martinasso, Miguel Gila, William Sawyer, Rafael Sarmiento-Pérez, Guilherme Peretti-Pezzi, Vasileios Karakasis
2020 J jnl
CoRR
Andreas Jocksch, Noé Ohana, Emmanuel Lanti, Vasileios Karakasis, Laurent Villard
2019 C conf
PDP
Nora Abi Akar, Ben Cumming, Vasileios Karakasis, Anne Küsters, Wouter Klijn, Alexander Peyser, Stuart Yates
2019 conf
HUST/SE-HER/WIHPC@SC
Vasileios Karakasis, Theofilos Manitaras, Victor Holanda Rusu, Rafael Sarmiento-Pérez, Christopher Bignamini, Matthias Kraushaar, Andreas Jocksch, Samuel Omlin, Guilherme Peretti-Pezzi, João P. S. C. Augusto, Brian Friesen, Yun (Helen) He, Lisa Gerhardt, Brandon Cook, Zhi-Qiang You, Samuel Khuvis, Karen Tomko
2018 J jnl
ACM Trans. Math. Softw.
Athena Elafrou, Vasileios Karakasis, Theodoros Gkountouvas, Kornilios Kourtis, Georgios I. Goumas, Nectarios Koziris
2017 conf
HPCS
Fabio Baruffa, Luigi Iapichino, Nicolay J. Hammer, Vasileios Karakasis
2016 J jnl
CoRR
Fabio Baruffa, Luigi Iapichino, Nicolay J. Hammer, Vasileios Karakasis
2013 J jnl
IEEE Trans. Parallel Distributed Syst.
Vasileios Karakasis, Theodoros Gkountouvas, Kornilios Kourtis, Georgios I. Goumas, Nectarios Koziris
2013 conf
IPDPS Workshops
Jan Christian Meyer, Juan M. Cebrian, Lasse Natvig, Vasileios Karakasis, Dimitris Siakavaras, Konstantinos Nikas
2013 A conf
IPDPS
Theodoros Gkountouvas, Vasileios Karakasis, Kornilios Kourtis, Georgios I. Goumas, Nectarios Koziris
2012 conf
PARA
Vasileios Karakasis, Georgios I. Goumas, Konstantinos Nikas, Nectarios Koziris, Juha Ruokolainen, Peter Råback
2011 B conf
PPoPP
Kornilios Kourtis, Vasileios Karakasis, Georgios I. Goumas, Nectarios Koziris
2009 conf
CSE (1)
Vasileios Karakasis, Georgios I. Goumas, Nectarios Koziris
2009 A conf
IPDPS
Vasileios Karakasis, Georgios I. Goumas, Nectarios Koziris
2009 B conf
ICPP
Vasileios Karakasis, Georgios I. Goumas, Nectarios Koziris
2009 J jnl
J. Supercomput.
Georgios I. Goumas, Kornilios Kourtis, Nikos Anastopoulos, Vasileios Karakasis, Nectarios Koziris
2008 C conf
HIS
Aris Lanaridis, Vasileios Karakasis, Andreas Stafylopatis
2008 J jnl
IEEE Trans. Evol. Comput.
Vasileios Karakasis, Andreas Stafylopatis
2008 C conf
PDP
Georgios I. Goumas, Kornilios Kourtis, Nikos Anastopoulos, Vasileios Karakasis, Nectarios Koziris
2007 A conf
IPDPS
Georgios I. Goumas, Nikolaos Drosinos, Vasileios Karakasis, Nectarios Koziris
2006 B conf
IEEE Congress on Evolutionary Computation
Vasileios Karakasis, Andreas Stafylopatis
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