V. Kumar Murty

18 papers B 1C 3Misc 3Journal 8Unranked 2
YearRankTypeTitle / Venue / Authors
2020 C conf
CW
Sonam Devgan Kaul, V. Kumar Murty, Dimitrios Hatzinakos
2016 J jnl
Adv. Math. Commun.
Ian F. Blake, V. Kumar Murty, Hamid Usefi
2015 conf
CWIT
Ian F. Blake, V. Kumar Murty, Hamid Usefi
2014 J jnl
CoRR
Ian F. Blake, V. Kumar Murty, Hamid Usefi
2014 J jnl
Adv. Math. Commun.
V. Kumar Murty, Ying Zong
2011 ch.
Cyber Security, Cyber Crime and Cyber Forensics
Kenneth J. Giuliani, V. Kumar Murty
2011 J jnl
Am. Math. Mon.
M. Ram Murty, V. Kumar Murty
2009 conf
IWCC
V. Kumar Murty, Nikolajs Volkovs
2008 C conf
SECRYPT
V. Kumar Murty, Nikolajs Volkovs
2008 C conf
SECRYPT
V. Kumar Murty, Guangwu Xu
2006 J jnl
J. Algorithms
Ian F. Blake, V. Kumar Murty, Guangwu Xu
2005 J jnl
Inf. Process. Lett.
Ian F. Blake, V. Kumar Murty, Guangwu Xu
2005 Misc conf
INDOCRYPT
V. Kumar Murty
2005 J jnl
J. Discrete Algorithms
Ian F. Blake, V. Kumar Murty, Guangwu Xu
2004 B conf
ISIT
Kenneth W. Shum, Ian F. Blake, V. Kumar Murty
2004 J jnl
IACR Cryptol. ePrint Arch.
Ian F. Blake, V. Kumar Murty, Guangwu Xu
2003 Misc conf
INDOCRYPT
Farzali A. Izadi, V. Kumar Murty
2001 Misc conf
INDOCRYPT
S. Ali Miri, V. Kumar Murty
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