Ievgenii Tsokalo

15 papers Journal 2Unranked 12
YearRankTypeTitle / Venue / Authors
2022 J jnl
Sensors
Stefan Senk, Marian Ulbricht, Ievgenii Tsokalo, Justus Rischke, Shu-Chen Li, Stefanie Speidel, Giang T. Nguyen, Patrick Seeling, Frank H. P. Fitzek
2021 conf
CCNC
Roberto Torre Arranz, Robert-Steve Schmoll, Florian Kemser, Hani Salah, Ievgenii Tsokalo, Frank H. P. Fitzek
2021 conf
CCNC
Andreas Ingo Grohmann, Alexander Kropp, Christopher Lehmann, Ievgenii Tsokalo, Frank H. P. Fitzek
2020 conf
INFOCOM Workshops
Roberto Torre Arranz, Robert-Steve Schmoll, Florian Kemser, Hani Salah, Ievgenii Tsokalo, Frank H. P. Fitzek
2018 conf
ICC Workshops
Frank Gabriel, Anil Kumar Chorppath, Ievgenii Tsokalo, Frank H. P. Fitzek
2018 J jnl
CoRR
Frank Gabriel, Anil Kumar Chorppath, Ievgenii Tsokalo, Frank H. P. Fitzek
2018 conf
ISPLC
Ievgenii Tsokalo, Frank Gabriel, Sreekrishna Pandi, Frank H. P. Fitzek, Ralf Lehnert
2017 conf
ISPLC
Ievgenii Tsokalo, Bho Matthiesen, Frank H. P. Fitzek
2017 conf
ISPLC
Ievgenii Tsokalo, Gautham Prasad, Stanislav Mudriievskyi, Ralf Lehnert
2017
Ievgenii Tsokalo
2017 conf
SmartGridComm
Norbert Graf, Ievgenii Tsokalo, Ralf Lehnert
2016 conf
ISPLC
Ievgenii Tsokalo, Ralf Lehnert, Frank H. P. Fitzek
2015 conf
ISPLC
Ievgenii Tsokalo, Ralf Lehnert
2011 conf
EUNICE
Ievgenii Tsokalo, Yamnenko Yulia, Stanislav Mudriievskyi
2011 conf
SmartGridComm
Stanislav Mudriievskyi, Ievgenii Tsokalo, Abdelfatteh Haidine, Bamidele Adebisi, Ralf Lehnert
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