Nada Sahlab

22 papers B 2C 6Journal 8Unranked 5
YearRankTypeTitle / Venue / Authors
2025 C conf
ETFA
Nada Sahlab, Hossein Rimaz, Prerna Juhlin, Marco Lo Guzzo, Samuel Rader
2025
Nada Sahlab
2023 J jnl
Artif. Intell. Medicine
Nada Sahlab, Iman Sonji, Michael Weyrich
2023 C conf
ETFA
Johannes Stümpfle, Nada Sahlab, Simon Kamm, Philipp Grimmeisen, Nasser Jazdi, Michael Weyrich
2023 J jnl
Autom.
Timo Müller, Birte Caesar, Matthias Weiß, Selma Ferhat, Nada Sahlab, Alexander Fay, Raphaël Oger, Nasser Jazdi, Michael Weyrich
2022 B conf
KES
Nada Sahlab, Hesham Kahoul, Nasser Jazdi, Michael Weyrich
2022 J jnl
CoRR
Nada Sahlab, Hesham Kahoul, Nasser Jazdi, Michael Weyrich
2022 C conf
ETFA
Dominik Braun, Timo Müller, Nada Sahlab, Nasser Jazdi, Wolfgang Schlögl, Michael Weyrich
2022 J jnl
CoRR
Dominik Braun, Timo Müller, Nada Sahlab, Nasser Jazdi, Wolfgang Schlögl, Michael Weyrich
2022 B conf
KES
Nada Sahlab, Nasser Jazdi, Michael Weyrich
2022 J jnl
CoRR
Nada Sahlab, Nasser Jazdi, Michael Weyrich
2022 C conf
ETFA
Timo Müller, Nada Sahlab, Simon Kamm, Christian Köhler, Dominik Braun, Nasser Jazdi, Michael Weyrich
2021 J jnl
CoRR
Benjamin Lindemann, Benjamin Maschler, Nada Sahlab, Michael Weyrich
2021 C conf
ETFA
Nada Sahlab, Dominik Braun, Tobias Jung, Nasser Jazdi, Michael Weyrich
2021 J jnl
Comput. Ind.
Benjamin Lindemann, Benjamin Maschler, Nada Sahlab, Michael Weyrich
2021 conf
ICPS
Nada Sahlab, Simon Kamm, Timo Müller, Nasser Jazdi, Michael Weyrich
2020 conf
GCCE
Nada Sahlab, Laura Wiebelitz, Peter Schmid, Florian Reichelt, Nasser Jazdi, Michael Weyrich, Thomas Maier
2020 conf
pHealth
Nada Sahlab, Nasser Jazdi
2020 C conf
ETFA
Nada Sahlab, Nasser Jazdi, Michael Weyrich
2019 J jnl
Autom.
Behrang Ashtari Talkhestani, Tobias Jung, Benjamin Lindemann, Nada Sahlab, Nasser Jazdi, Wolfgang Schlögl, Michael Weyrich
2019 conf
IHSED
Nada Sahlab, Nasser Jazdi, Michael Weyrich, Peter Schmid, Florian Reichelt, Thomas Maier, Gerd Meyer-Philippi, Manfred Matschke, Günther Kalka
2019 conf
IHSED
Florian Reichelt, Peter Schmid, Thomas Maier, Nada Sahlab, Nasser Jazdi-Motlagh, Michael Weyrich, Gerd Meyer-Philippi, Günther Kalka, Manfred Matschke
tests/unit/test_decompile_function_type.py
← Index tests/unit/test_decompile_function_type.py python
"""Unit tests for bninja/function_type.py."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import install_binja_stubs, SymbolType
install_binja_stubs()

from redb.extractors.decompiler.bninja.function_type import (
    FunctionType,
    FunctionTypeAnalysis,
)


# ============================================================================
# 4a. FunctionType / FunctionTypeAnalysis
# ============================================================================


class TestFunctionTypeEnum:
    def test_function_type_enum_values(self):
        assert FunctionType.USER.value == "USER"
        assert FunctionType.LIBRARY.value == "LIBRARY"
        assert FunctionType.EXTERNAL.value == "EXTERNAL"
        assert FunctionType.THUNK.value == "THUNK"
        assert FunctionType.UNKNOWN.value == "UNKNOWN"


class TestFunctionTypeAnalysis:
    def _make_function(self, symbol_type=None, is_thunk=False, raise_on_symbol=False):
        func = MagicMock()
        func.is_thunk = is_thunk
        if raise_on_symbol:
            type(func).symbol = property(lambda self: (_ for _ in ()).throw(Exception("no symbol")))
        else:
            func.symbol.type = symbol_type if symbol_type is not None else SymbolType.FunctionSymbol
        return func

    def test_user_function_type(self):
        func = self._make_function(symbol_type=SymbolType.FunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.USER

    def test_external_function_type(self):
        func = self._make_function(symbol_type=SymbolType.ImportedFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.EXTERNAL

    def test_library_function_type(self):
        func = self._make_function(symbol_type=SymbolType.LibraryFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.LIBRARY

    def test_thunk_function_type(self):
        # Thunk overrides the symbol type
        func = self._make_function(
            symbol_type=SymbolType.FunctionSymbol, is_thunk=True
        )
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.THUNK

    def test_exception_returns_unknown(self):
        func = self._make_function(raise_on_symbol=True)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.UNKNOWN