Xiangbo Meng

14 papers B 1Journal 7Unranked 6
YearRankTypeTitle / Venue / Authors
2024 J jnl
Database J. Biol. Databases Curation
Chong Peng, Xiaofeng Liu, Xiangbo Meng, Congge Chen, Xinming Wu, Lin Bai, Fuping Lu, Fufeng Liu
2022 J jnl
IEEE Trans. Commun.
Kang Gao, Xiangbo Meng, J. Nicholas Laneman, Jonathan D. Chisum, Ralf M. Bendlin, Aditya Chopra, Bertrand M. Hochwald
2022 B conf
GLOBECOM
Xiangbo Meng, Nicholas Estes, J. Nicholas Laneman, Jonathan D. Chisum, Ralf M. Bendlin, Bertrand M. Hochwald
2021 J jnl
CoRR
Xiangbo Meng, Kang Gao, Bertrand M. Hochwald
2019 conf
RCAR
Jingwen Sun, Lijun Zhao, Ke Wang, Yujia Zhao, Xiangbo Meng, Chuwei Mao, Jiancheng Wang
2019 conf
NEMS
Abayomi Omolewu, Guangyi Shi, Tian Ryan, Xiangbo Meng, Uchechukwu C. Wejinya
2018 J jnl
IEEE Access
Xiaoshi Song, Xiangbo Meng, Xile Shen, Chao Jia
2018 conf
ICCC Workshops
Xile Shen, Xiaoshi Song, Xiangbo Meng, Chao Jia
2018 J jnl
IEEE Access
Chao Jia, Xiaoshi Song, Xiangbo Meng
2017 J jnl
IEEE Access
Xiaoshi Song, Yuting Geng, Xiangbo Meng, Jun Liu, Weimin Lei, Yingyou Wen
2017 conf
5GWN
Xiaoshi Song, Xiangbo Meng, Yuting Geng, Ning Ye, Jun Liu
2017 J jnl
Inf. Sci.
Xiaolong Chen, Xiangbo Meng, Xiaoshi Song, Yuting Geng, Chun Shan
2017 conf
5GWN
Xiaoshi Song, Yuting Geng, Xiangbo Meng, Ning Ye, Jun Liu, Weimin Lei
2007 conf
LSMS (1)
Jun Kong, Yanfen Zhang, Xiangbo Meng, Ying Zheng, Yinghua Lu
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