Kai Schlegel

16 papers Journal 2Unranked 13
YearRankTypeTitle / Venue / Authors
2016 conf
ESWC (Satellite Events)
Emanuel Berndl, Kai Schlegel, Andreas Eisenkolb, Thomas Weißgerber, Harald Kosch
2016 conf
LIME/SemDev@ESWC
Emanuel Berndl, Kai Schlegel, Andreas Eisenkolb, Harald Kosch
2016 ed.
LIME/SemDev
Raphaël Troncy, Ruben Verborgh, Lyndon J. B. Nixon, Thomas Kurz, Kai Schlegel, Miel Vander Sande
2015 conf
I-KNOW
Kai Schlegel, Emanuel Berndl, Michael Granitzer, Harald Kosch, Thomas Kurz
2015 conf
WWW (Companion Volume)
Thomas Kurz, Kai Schlegel, Harald Kosch
2015 conf
ICME Workshops
Patrick Aichroth, Christian Weigel, Thomas Kurz, Horst Stadler, Frank Drewes, Johanna Björklund, Kai Schlegel, Emanuel Berndl, Antonio Perez, Alex Bowyer, Andrea Volpini
2014 conf
ICDE Workshops
Kai Schlegel, Florian Stegmaier, Sebastian Bayerl, Michael Granitzer, Harald Kosch
2014 conf
ESWC (Satellite Events)
Kai Schlegel, Thomas Weißgerber, Florian Stegmaier, Christin Seifert, Michael Granitzer, Harald Kosch
2014 conf
ISWC (Developers Workshop)
Kai Schlegel, Thomas Weißgerber, Florian Stegmaier, Michael Granitzer, Harald Kosch
2014 J jnl
ERCIM News
Florian Stegmaier, Kai Schlegel, Michael Granitzer
2014 conf
ESWC (Satellite Events)
Thomas Kurz, Sebastian Schaffert, Kai Schlegel, Florian Stegmaier, Harald Kosch
2013 conf
CHI-KDD
Christin Seifert, Michael Granitzer, Patrick Höfler, Belgin Mutlu, Vedran Sabol, Kai Schlegel, Sebastian Bayerl, Florian Stegmaier, Stefan Zwicklbauer, Roman Kern
2013 conf
ESWC (Satellite Events)
Kai Schlegel, Sebastian Bayerl, Stefan Zwicklbauer, Florian Stegmaier, Christin Seifert, Michael Granitzer, Harald Kosch
2012 J jnl
Int. J. Multim. Data Eng. Manag.
Kai Schlegel, Florian Stegmaier, Sebastian Bayerl, Harald Kosch, Mario Döller
2012 conf
WBDB
Florian Stegmaier, Christin Seifert, Roman Kern, Patrick Höfler, Sebastian Bayerl, Michael Granitzer, Harald Kosch, Stefanie N. Lindstaedt, Belgin Mutlu, Vedran Sabol, Kai Schlegel, Stefan Zwicklbauer
2011 conf
GI-Jahrestagung
Florian Stegmaier, Mario Döller, Kai Schlegel, Sascha Seifert, Martin Kramer, Thomas Riegel, Andreas Hutter, Harald Kosch, Marisa Thoma, Hans-Peter Kriegel, Alexander Cavallaro, Matthias Hammon
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