Xiaoguang Yuan

15 papers C 1Journal 10Unranked 4
YearRankTypeTitle / Venue / Authors
2024 J jnl
Expert Syst. Appl.
Qi Liu, Wenjun Ke, Xiaoguang Yuan, Yuting Yang, Hua Zhao, Peng Wang
2024 J jnl
Knowl. Based Syst.
Xuemeng Tian, Yikai Guo, Bin Ge, Xiaoguang Yuan, Hang Zhang, Yuting Yang, Wenjun Ke, Guozheng Li
2023 J jnl
Symmetry
Shiruo Liu, Xiaoguang Yuan, Wei Feng, Aifeng Ren, Zhenyong Hu, Zuheng Ming, Adnan Zahid, Qammer H. Abbasi, Shuo Wang
2023 J jnl
Remote. Sens.
Xiaoguang Yuan, Yiduo Liang, Wei Feng, Junhang Li, Hongtao Ren, Shuo Han, Mengqi Liu
2023 J jnl
IEICE Trans. Inf. Syst.
Xiaoguang Yuan, Chaofan Dai, Zongkai Tian, Xinyu Fan, Yingyi Song, Zengwen Yu, Peng Wang, Wenjun Ke
2023 J jnl
Remote. Sens.
Xiaoguang Yuan, Shiruo Liu, Wei Feng, Gabriel Dauphin
2022 conf
ICIAI
Jianwei Zhang, Xiaoguang Yuan, Zhewei Xu, Wenjun Ke
2022 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Yang Cao, Wei Feng, Yinghui Quan, Wenxing Bao, Gabriel Dauphin, Aifeng Ren, Xiaoguang Yuan, Mengdao Xing
2022 conf
CACML
Pingyuan Li, Dan Zhang, Xiaoguang Yuan, Suiping Jiang
2022 conf
CCCE
Jianwei Zhang, Shan Jiang, Kunlong Wang, Rui Wang, Qi Liu, Xiaoguang Yuan
2021 J jnl
Appl. Soft Comput.
Yanhua Liu, Xiaoguang Yuan, Xin Jiang, Pei Wang, Jinqiao Kou, Haofeng Wang, Mingzhe Liu
2021 conf
CSSE
Pingyuan Li, Xiaoguang Yuan, Suiping Jiang
2021 J jnl
Inf. Sci.
Lei Wang, Xiaoguang Yuan, Ming Zong, Yujun Ma, Wanting Ji, Mingzhe Liu, Ruili Wang
2020 C conf
IGARSS
Wei Feng, Yinghui Quan, Gabriel Dauphin, Puxia Wu, Bowen Bie, Yingping Tong, Xiaoguang Yuan, Jing Li, Mengdao Xing
2016 J jnl
Appl. Math. Comput.
Xiaoguang Yuan, Quan Jiang, Fengpeng Yang
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