Nan Zhang

19 papers A* 11A 1B 1Journal 5Unranked 1
YearRankTypeTitle / Venue / Authors
2024 A* conf
MobiCom
Jianwei Zheng, Zhenhua Li, Feng Qian, Wei Liu, Hao Lin, Yunhao Liu, Tianyin Xu, Nan Zhang, Ju Wang, Cang Zhang
2020 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Yeonjoon Lee, Yue Zhao, Jiutian Zeng, Kwangwuk Lee, Nan Zhang, Faysal Hossain Shezan, Yuan Tian, Kai Chen, Xiaofeng Wang
2019 A* conf
IEEE Symposium on Security and Privacy
Nan Zhang, Xianghang Mi, Xuan Feng, Xiaofeng Wang, Yuan Tian, Feng Qian
2019 A* conf
IEEE Symposium on Security and Privacy
Yi Chen, Mingming Zha, Nan Zhang, Dandan Xu, Qianqian Zhao, Xuan Feng, Kan Yuan, Fnu Suya, Yuan Tian, Kai Chen, Xiaofeng Wang, Wei Zou
2018 J jnl
CoRR
Nan Zhang, Xianghang Mi, Xuan Feng, Xiaofeng Wang, Yuan Tian, Feng Qian
2017 J jnl
IEEE Secur. Priv.
Xiaolong Bai, Luyi Xing, Nan Zhang, Xiaofeng Wang, Xiaojing Liao, Tongxin Li, Shi-Min Hu
2017 A conf
DSN
Yeonjoon Lee, Tongxin Li, Nan Zhang, Soteris Demetriou, Mingming Zha, Xiaofeng Wang, Kai Chen, Xiao-yong Zhou, Xinhui Han, Michael Grace
2017 J jnl
CoRR
Soteris Demetriou, Nan Zhang, Yeonjoon Lee, Xiaofeng Wang, Carl A. Gunter, Xiao-yong Zhou, Michael Grace
2017 conf
WISEC
Soteris Demetriou, Nan Zhang, Yeonjoon Lee, Xiaofeng Wang, Carl A. Gunter, Xiao-yong Zhou, Michael Grace
2017 A* conf
USENIX Security Symposium
Xiaolong Bai, Zhe Zhou, Xiaofeng Wang, Zhou Li, Xianghang Mi, Nan Zhang, Tongxin Li, Shi-Min Hu, Kehuan Zhang
2017 A* conf
USENIX Security Symposium
Yuan Tian, Nan Zhang, Yue-Hsun Lin, Xiaofeng Wang, Blase Ur, Xianzheng Guo, Patrick Tague
2017 J jnl
CoRR
Nan Zhang, Soteris Demetriou, Xianghang Mi, Wenrui Diao, Kan Yuan, Peiyuan Zong, Feng Qian, Xiaofeng Wang, Kai Chen, Yuan Tian, Carl A. Gunter, Kehuan Zhang, Patrick Tague, Yue-Hsun Lin
2017 A* conf
CCS
Tongxin Li, Xueqiang Wang, Mingming Zha, Kai Chen, Xiaofeng Wang, Luyi Xing, Xiaolong Bai, Nan Zhang, Xinhui Han
2016 A* conf
IEEE Symposium on Security and Privacy
Xiaolong Bai, Luyi Xing, Nan Zhang, Xiaofeng Wang, Xiaojing Liao, Tongxin Li, Shi-Min Hu
2015 A* conf
USENIX Security Symposium
Kai Chen, Peng Wang, Yeonjoon Lee, Xiaofeng Wang, Nan Zhang, Heqing Huang, Wei Zou, Peng Liu
2015 A* conf
CCS
Yousra Aafer, Nan Zhang, Zhongwen Zhang, Xiao Zhang, Kai Chen, Xiaofeng Wang, Xiao-yong Zhou, Wenliang Du, Michael Grace
2015 A* conf
IEEE Symposium on Security and Privacy
Nan Zhang, Kan Yuan, Muhammad Naveed, Xiao-yong Zhou, Xiaofeng Wang
2014 A* conf
IEEE Symposium on Security and Privacy
Xiao-yong Zhou, Yeonjoon Lee, Nan Zhang, Muhammad Naveed, Xiaofeng Wang
2011 B conf
TrustCom
Nan Zhang, Jiwu Jing, Peng Liu
tests/unit/test_decompile_arch.py
← Index tests/unit/test_decompile_arch.py python
"""Unit tests for architecture modules:
- bninja/arch/creator.py
- bninja/arch/x86.py
"""
import sys
import pytest

# Install binaryninja stubs before importing arch modules
from tests.unit.conftest_binja_stubs import install_binja_stubs
install_binja_stubs()

from redb.extractors.decompiler.bninja.arch.creator import ArchitectureCreator
from redb.extractors.decompiler.bninja.arch.x86 import Arch_x86


# ============================================================================
# 3a. ArchitectureCreator
# ============================================================================

class TestArchitectureCreator:
    def test_create_x86(self):
        arch = ArchitectureCreator("x86").get()
        assert isinstance(arch, Arch_x86)

    def test_create_x86_case_insensitive(self):
        for name in ["X86", "x86", "X86"]:
            arch = ArchitectureCreator(name).get()
            assert isinstance(arch, Arch_x86)

    def test_unsupported_arch_raises(self):
        with pytest.raises(ValueError, match="Unsupported architecture"):
            ArchitectureCreator("arm").get()


# ============================================================================
# 3b. Arch_x86
# ============================================================================

class TestArch_x86Registers:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_is_register_valid(self):
        assert self.arch.is_register("RAX") is True
        assert self.arch.is_register("eax") is True
        assert self.arch.is_register("XMM0") is True

    def test_is_register_invalid(self):
        assert self.arch.is_register("INVALID_REG") is False

    def test_is_general_purpose_register(self):
        assert self.arch.is_general_purpose_register("RAX") is True
        assert self.arch.is_general_purpose_register("XMM0") is False

    def test_is_stack_register(self):
        assert self.arch.is_stack_register("RSP") is True
        assert self.arch.is_stack_register("RBP") is True
        assert self.arch.is_stack_register("RAX") is False

    def test_is_xmm_register(self):
        assert self.arch.is_xmm_register("XMM0") is True
        assert self.arch.is_xmm_register("RAX") is False


class TestArch_x86OpcodeCategories:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_opcode_categories_populated(self):
        assert len(self.arch.opcode_categories) > 0

    def test_opcode_mov_category(self):
        assert self.arch.opcode_categories["MOV"] == "DATA_MOVEMENT"

    def test_opcode_call_category(self):
        assert self.arch.opcode_categories["CALL"] == "CONTROL_FLOW"

    def test_opcode_add_category(self):
        assert self.arch.opcode_categories["ADD"] == "ARITHMETIC"


class TestArch_x86ControlFlow:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_is_control_flow_instruction_by_mnemonic(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("JMP") is True
        assert self.arch.is_control_flow_instruction_by_mnemonic("MOV") is False

    def test_is_control_flow_instruction_call(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("CALL") is True

    def test_is_control_flow_instruction_ret(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("RET") is True

    def test_is_control_flow_instruction_loop(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("LOOP") is True

    def test_is_control_flow_instruction_empty(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("") is False
        assert self.arch.is_control_flow_instruction_by_mnemonic(None) is False