Nashwan Dawood

36 papers C 1Misc 2Journal 29Unranked 4
YearRankTypeTitle / Venue / Authors
2024 J jnl
J. Inf. Technol. Constr.
Elena Imani, Huda Dawood, Nashwan Dawood, Annalisa Occhipinti
2024 J jnl
J. Inf. Technol. Constr.
Vito Getuli, Farzad Pour Rahimian, Nashwan Dawood, Pietro Capone, Alessandro Bruttini
2023 J jnl
J. Inf. Technol. Constr.
Chansik Park, Nashwan Dawood, Farzad Pour Rahimian, Akeem Pedro
2021 J jnl
J. Inf. Technol. Constr.
Yasir Alani, Nashwan Dawood, João Patacas, Sergio Rodriguez, Huda Dawood
2021 J jnl
J. Inf. Technol. Constr.
Andrew Pidgeon, Nashwan Dawood
2021 J jnl
J. Inf. Technol. Constr.
Andrew Pidgeon, Nashwan Dawood
2021 conf
HCI (25)
Carla Resendiz-Villasenor, Farzad Pour Rahimian, Phillippa Carnemolla, Sergio Rodriguez, Nashwan Dawood
2021 J jnl
J. Inf. Technol. Constr.
Nashwan Dawood, Farzad Pour Rahimian
2019 J jnl
J. Inf. Technol. Constr.
Huda Dawood, Jonathan Siddle, Nashwan Dawood
2016 conf
SmartGIFT
Tracey Crosbie, Vladimir Vukovic, Michael Short, Nashwan Dawood, Richard Charlesworth, Paul Brodrick
2016 J jnl
J. Inf. Technol. Constr.
João Patacas, Nashwan Dawood, David Greenwood, Mohamad Kassem
2015 J jnl
J. Inf. Technol. Constr.
João Patacas, Nashwan Dawood, Vladimir Vukovic, Mohamad Kassem
2015 conf
PLM
Mian Atif Hafeez, Racha Chahrour, Vladimir Vukovic, Nashwan Dawood, Mohamad Kassem
2014 J jnl
J. Inf. Technol. Constr.
Mohamad Kassem, Nahim Iqbal, Graham Kelly, Stephen Lockley, Nashwan Dawood
2014 J jnl
J. Inf. Technol. Constr.
Nashwan Dawood, Geoff Miller, João Patacas, Mohamad Kassem
2014 J jnl
Adv. Eng. Informatics
Hyoun-Seok Moon, Nashwan Dawood, Leen-Seok Kang
2013 J jnl
Int. J. Bus. Perform. Supply Chain Model.
Mohamad Kassem, Nashwan Dawood
2012 J jnl
J. Inf. Technol. Constr.
Hanne Grindvoll, Ovidiu Vermesan, Tracey Crosbie, Roy Bahr, Nashwan Dawood, Gian Marco Revel
2012 J jnl
J. Inf. Technol. Constr.
Rajiv Chavada, Nashwan Dawood, Mohamad Kassem
2012 C conf
CDVE
Nashwan Dawood, Jeoffrey Miller, Nobuyoshi Yabuki
2012 J jnl
OR Insight
Ammar Al-Bazi, Nashwan Dawood
2011 J jnl
J. Inf. Technol. Constr.
Mohamad Kassem, Nashwan Dawood, Donald Mitchell
2010 J jnl
J. Inf. Technol. Constr.
Eugene Loh, Tracey Crosbie, Nashwan Dawood, John Dean
2010 J jnl
Comput. Aided Civ. Infrastructure Eng.
Ammar Al-Bazi, Nashwan Dawood
2010 J jnl
J. Inf. Technol. Constr.
Ammar Al-Bazi, Nashwan Dawood, John T. Dean
2009 J jnl
J. Inf. Technol. Constr.
Nashwan Dawood, Serafim Castro
2009 J jnl
Comput. Aided Civ. Infrastructure Eng.
Koji Makanae, Nashwan Dawood
2009 Misc conf
WSC
Saad Dawood, Richard Lord, Nashwan Dawood
2009 J jnl
J. Inf. Technol. Constr.
Nashwan Dawood
2008 J jnl
J. Inf. Technol. Constr.
Raj Kapur Shah, Nashwan Dawood, Serafim Castro
2008 J jnl
J. Inf. Technol. Constr.
Nashwan Dawood, Sushant Sikka
2006 J jnl
Comput. Aided Civ. Infrastructure Eng.
Nashwan Dawood, Zaki Mallasi
2006 conf
EG-ICE
Nashwan Dawood, Sushant Sikka
2005 J jnl
J. Inf. Technol. Constr.
Nashwan Dawood, Darren Scott, Eknarin Sriprasert, Zaki Mallasi
2003 J jnl
J. Inf. Technol. Constr.
Eknarin Sriprasert, Nashwan Dawood
2002 Misc conf
WSC
Ramesh Marasini, Nashwan Dawood
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