Xianan Zhang

11 papers A* 2A 2C 1Misc 1Journal 5
YearRankTypeTitle / Venue / Authors
2023 J jnl
IEEE Trans. Veh. Technol.
Xianan Zhang, Yu Zhang, Guanghua Liu, Tao Jiang
2023 A* conf
MobiCom
Huixin Dong, Yirong Xie, Xianan Zhang, Wei Wang, Xinyu Zhang, Jianhua He
2023 J jnl
CoRR
Huixin Dong, Yirong Xie, Xianan Zhang, Wei Wang, Xinyu Zhang, Jianhua He
2022 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Xianan Zhang, Lieke Chen, Mingjie Feng, Tao Jiang
2020 J jnl
CoRR
Xianan Zhang, Wei Wang, Xuedou Xiao, Hang Yang, Xinyu Zhang, Tao Jiang
2020 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Xianan Zhang, Wei Wang, Xuedou Xiao, Hang Yang, Xinyu Zhang, Tao Jiang
2020 A* conf
OSDI
Mahesh Balakrishnan, Jason Flinn, Chen Shen, Mihir Dharamshi, Ahmed Jafri, Xiao Shi, Santosh Ghosh, Hazem Hassan, Aaryaman Sagar, Rhed Shi, Jingming Liu, Filip Gruszczynski, Xianan Zhang, Huy Hoang, Ahmed Yossef, Francois Richard, Yee Jiun Song
2006 Misc conf
EDCC
Xianan Zhang, Matti A. Hiltunen, Keith Marzullo, Richard D. Schlichting
2006 A conf
HPDC
Xianan Zhang, Flavio Junqueira, Matti A. Hiltunen, Keith Marzullo, Richard D. Schlichting
2004 C conf
CLUSTER
Xianan Zhang, Dmitrii Zagorodnov, Matti A. Hiltunen, Keith Marzullo, Richard D. Schlichting
2003 A conf
ICDCS
Kjetil Jacobsen, Xianan Zhang, Keith Marzullo
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