Xiaogong Hu

20 papers Journal 20
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jing Qiao, Bofeng Li, Xiaogong Hu, Yusheng Zhu
2024 J jnl
Sensors
Shaoqian Li, Baojun Lin, Rui Li, Xiaogong Hu, Richang Dong
2024 J jnl
Remote. Sens.
Min Liao, Chengpan Tang, Liqian Zhao, Shanshi Zhou, Xiaogong Hu, Yilun Chen, Kai Li, Yubo Gui
2022 J jnl
Remote. Sens.
Qiuning Tian, Yueling Cao, Xiaogong Hu, Chengpan Tang, Shanshi Zhou, Rui Guo, Xiaojie Li, Yijun Tian, Yufei Yang, Jianhua Yang
2022 J jnl
Remote. Sens.
Yueling Cao, Jinping Chen, Li Liu, Xiaogong Hu, Yuchen Liu, Jie Xin, Liqian Zhao, Qiuning Tian, Shanshi Zhou, Bin Wu
2022 J jnl
IEEE Trans. Instrum. Meas.
Yuexin Ma, Chengpan Tang, Xiaogong Hu, Zhiqiao Chang, Yufei Yang, Jianhua Yang
2022 J jnl
Remote. Sens.
Jianhua Yang, Chengpan Tang, Sanshi Zhou, Yezhi Song, Jinhuo Liu, Yu Xiang, Yuchen Liu, Qiuning Tian, Yufei Yang, Zuo Yang, Xiaogong Hu
2022 J jnl
IEEE Trans. Instrum. Meas.
Yuexin Ma, Chengpan Tang, Xiaogong Hu, Xiangwei Zhu, Leyuan Sun, Yufei Yang, Zhiqiao Chang, Jianhua Yang
2022 J jnl
Remote. Sens.
Junchen Xue, Sreeja Vadakke Veettil, Marcio Aquino, Xiaogong Hu, Lin Quan, Dun Liu, Peng Guo, Mengjie Wu
2022 J jnl
Remote. Sens.
Xinglong Zhao, Shanshi Zhou, Jianfeng Cao, Junjun Yuan, Ziqian Wu, Xiaogong Hu
2022 J jnl
Remote. Sens.
Wei Zhou, Hongliang Cai, Ziqiang Li, Chengpan Tang, Xiaogong Hu, Wanke Liu
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jianming Wu, Yanling Chen, Peng Guo, Xiaoya Wang, Xiaogong Hu, Mengjie Wu, Fenghui Li, Naifeng Fu, Yanzhen Hao
2022 J jnl
Remote. Sens.
Jinhuo Liu, Chengpan Tang, Shanshi Zhou, Xiaogong Hu, Yufei Yang, Jianhua Yang, Yuchen Liu
2021 J jnl
Remote. Sens.
Mengjie Wu, Peng Guo, Wei Zhou, Junchen Xue, Xingyuan Han, Yansong Meng, Xiaogong Hu
2021 J jnl
Remote. Sens.
Junjun Yuan, Shanshi Zhou, Xiaogong Hu, Long Yang, Jianfeng Cao, Kai Li, Min Liao
2021 J jnl
Remote. Sens.
Yuchen Liu, Yueling Cao, Chengpan Tang, Jinping Chen, Liqian Zhao, Shanshi Zhou, Xiaogong Hu, Qiuning Tian, Yufei Yang
2020 J jnl
Remote. Sens.
Lu Tang, Jin Li, Jianli Chen, Song-Yun Wang, Rui Wang, Xiaogong Hu
2019 J jnl
Remote. Sens.
Naifeng Fu, Peng Guo, Mengjie Wu, Yong Huang, Xiaogong Hu, Zhenjie Hong
2019 J jnl
Remote. Sens.
Naifeng Fu, Peng Guo, Mengjie Wu, Yong Huang, Xiaogong Hu, Zhenjie Hong
2017 J jnl
Remote. Sens.
Shengnan Ni, Jianli Chen, Clark R. Wilson, Xiaogong Hu
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