Haibo Liang

27 papers Journal 26Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Instrum. Meas.
Hai Yang, Yaoxuan Zheng, Tianya Xie, Yiliang Yan, Haibo Liang, Jialing Zou
2024 J jnl
IEEE Trans. Instrum. Meas.
Yuedong Xie, Fulu Liu, Jiangtao Sun, Peng Suo, Lijun Xu, Keyu Du, Hanyang Xu, Jianyu Feng, Haibo Liang
2022 J jnl
IEEE Trans. Instrum. Meas.
Haibo Liang, Haifeng Chen, Jinhong Guo, Xing Zuo
2022 J jnl
IEEE Trans. Instrum. Meas.
Zhongbing Li, Wei Pang, Haibo Liang, Guihui Chen, Xinyu Zheng, Pengbo Ni
2022 J jnl
Expert Syst. Appl.
Haibo Liang, Haifeng Chen, Jinhong Guo, Jing Bai, Yingjun Jiang
2022 J jnl
Neural Comput. Appl.
Haibo Liang, Weidong Liu
2022 J jnl
Neural Comput. Appl.
He Zhang, Qiuhong Chen, Pengbo Ni, Haibo Liang, Min Mao, Jialing Zou
2021 J jnl
Neural Comput. Appl.
Haibo Liang, Qi Wei, Dengyun Lu, Zhiling Li
2021 J jnl
IEEE Trans. Instrum. Meas.
Hai Yang, Lizao Zhang, Li Li, Haibo Liang, Jialing Zou
2021 J jnl
Neural Comput. Appl.
Haibo Liang, Haochen Han, Pengbo Ni, Yingjun Jiang
2021 J jnl
Future Gener. Comput. Syst.
Haibo Liang, Gang Liu, Jialing Zou, Jing Bai, Yingjun Jiang
2021 J jnl
Future Gener. Comput. Syst.
Haibo Liang, Haifeng Chen, Jialing Zou, Jing Bai
2020 J jnl
Phys. Commun.
Haibo Liang, Bo Ma, Kai Zuo, Jiangna Cao
2020 J jnl
Neural Comput. Appl.
Haibo Liang, Gang Liu, Jianchong Gao, Muhammad Junaid Khan
2020 J jnl
Peer-to-Peer Netw. Appl.
Haibo Liang, Xin Qin, Jianchong Gao, Muhammad Junaid Khan
2020 J jnl
Circuits Syst. Signal Process.
Haibo Liang, Jialing Zou
2020 J jnl
Comput. Commun.
Jijun Zhang, Haibo Liang, Zhiwei Chen
2019 J jnl
IEEE Access
Hai Yang, Li Li, Tao Luo, Haibo Liang, Yue Rao, Zhi Qiu
2019 J jnl
IEEE Access
Haibo Liang, Jialing Zou, Muhammad Junaid Khan, Han Jinxuan
2019 J jnl
Clust. Comput.
Haibo Liang, Jialing Zou, Wenlong Liang
2019 J jnl
Clust. Comput.
Haibo Liang, Wang zhi
2019 J jnl
Future Gener. Comput. Syst.
Haibo Liang, Jialing Zou, Zhiling Li, Muhammad Junaid Khan, Yanjun Lu
2019 J jnl
Clust. Comput.
Haibo Liang, Guoliang Li, Wenlong Liang
2019 J jnl
Multim. Tools Appl.
Haibo Liang, Zhenglin Li, Guoliang Li
2019 J jnl
IEEE Access
Haibo Liang, Chen Yun, Muhammad Junaid Kan, Jianchong Gao
2019 J jnl
EURASIP J. Wirel. Commun. Netw.
Haibo Liang, Shuo Yang, Li Li, Jianchong Gao
2009 conf
CSO (2)
Zhen Shi, Ping Jiang, Haibo Liang, Ciyu Ji
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