Xiao Han

17 papers A* 3Journal 12Unranked 2
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Yuwen Cui, Guangjing Wang, Khanh Vu, Kai Wei, Kehan Shen, Zhengyuan Jiang, Xiao Han, Ning Wang, Zhuo Lu, Yao Liu
2025 A* conf
INFOCOM
Jiahao Xue, Xiao Han, Shangqing Zhao, Yao Liu, Zhuo Lu
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Junjie Xiong, Mingkui Wei, Xiao Han, Zhuo Lu, Yao Liu
2024 A* conf
SP
Zhe Qu, Rui Duan, Xiao Han, Shangqing Zhao, Yao Liu, Zhuo Lu
2024 J jnl
IEEE Trans. Dependable Secur. Comput.
Xiao Han, Junjie Xiong, Wenbo Shen, Mingkui Wei, Shangqing Zhao, Zhuo Lu, Yao Liu
2022 J jnl
J. Commun. Inf. Networks
Yifei Sun, Jie Li, Tong Zhang, Rui Wang, Xiaohui Peng, Xiao Han, Haisheng Tan
2022 A* conf
CCS
Xiao Han, Junjie Xiong, Wenbo Shen, Zhuo Lu, Yao Liu
2021 conf
SecureComm (2)
Chengbin Hu, Yao Liu, Zhuo Lu, Shangqing Zhao, Xiao Han, Junjie Xiong
2020 J jnl
IEEE Commun. Surv. Tutorials
Cailian Deng, Xuming Fang, Xiao Han, Xianbin Wang, Li Yan, Rong He, Yan Long, Yuchen Guo
2020 conf
ICC
Yizheng Tang, Ganggang Ma, Hailiang Xie, Jie Xu, Xiao Han
2019 J jnl
IEEE Trans. Veh. Technol.
Pei Zhou, Xuming Fang, Xianbin Wang, Yan Long, Rong He, Xiao Han
2019 J jnl
CoRR
Yizheng Tang, Ganggang Ma, Hailiang Xie, Jie Xu, Xiao Han
2018 J jnl
CoRR
Pei Zhou, Kaijun Cheng, Xiao Han, Xuming Fang, Yuguang Fang, Rong He, Yan Long, Yanping Liu
2018 J jnl
IEEE Commun. Surv. Tutorials
Pei Zhou, Kaijun Cheng, Xiao Han, Xuming Fang, Yuguang Fang, Rong He, Yan Long, Yanping Liu
2017 J jnl
IEEE Trans. Wirel. Commun.
Pei Zhou, Xuming Fang, Yuguang Fang, Yan Long, Rong He, Xiao Han
2017 J jnl
CoRR
Pei Zhou, Xuming Fang, Yuguang Fang, Yan Long, Rong He, Xiao Han
2017 J jnl
Trans. Emerg. Telecommun. Technol.
Xiao Han, Teng Joon Lim, Jie Xu
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