James Shey

14 papers Journal 6Unranked 8
YearRankTypeTitle / Venue / Authors
2024 J jnl
Symmetry
Christian DeLozier, Justin A. Blanco, Ryan N. Rakvic, James Shey
2023 J jnl
Int. J. Serious Games
Christian DeLozier, James Shey
2022 conf
MEMSYS
Jennie Hill, Justin A. Blanco, James Shey, Ryan N. Rakvic, T. Owens Walker III
2022 conf
IEEECONF
Olivia Shapiro, James Shey, Jennie Hill, Robert Ives, Ryan N. Rakvic, Hau T. Ngo, T. Owens Walker III
2021 J jnl
Comput. Secur.
Dane Brown, T. Owens Walker III, Justin A. Blanco, Robert W. Ives, Hau T. Ngo, James Shey, Ryan N. Rakvic
2020 J jnl
IEEE Access
T. Owens Walker, Justin A. Blanco, Ryan N. Rakvic, Ann C. Vanleer, Dane Brown, James Shey, Gregory L. Sinsley, Hau T. Ngo, Robert W. Ives
2020 conf
CF
Rupam Mondal, Hau T. Ngo, James Shey, Ryan N. Rakvic, T. Owens Walker, Dane Brown
2019 J jnl
J. Hardw. Syst. Secur.
James Shey, Naghmeh Karimi, Ryan W. Robucci, Chintan Patel
2019 J jnl
IEEE Trans. Inf. Forensics Secur.
James Shey, Justin A. Blanco, T. Owens Walker, Thomas W. Tedesso, Hau T. Ngo, Ryan N. Rakvic, Kevin D. Fairbanks
2018 conf
DASC/PiCom/DataCom/CyberSciTech
Zachary Johnson, Alex Varon, Justin A. Blanco, Ryan N. Rakvic, James Shey, Hau T. Ngo, Dane Brown, T. Owens Walker
2018 conf
ISVLSI
James Shey, Naghmeh Karimi, Ryan W. Robucci, Chintan Patel
2018 conf
MEMSYS
Dane Brown, T. Owens Walker, Ryan N. Rakvic, Robert W. Ives, Hau T. Ngo, James Shey, Justin A. Blanco
2016 conf
UEMCON
JonPaul Canclini, James McMasters, James Shey, T. Owens Walker, Ryan N. Rakvic, Hau T. Ngo, Kevin D. Fairbanks
2016 conf
I2MTC
James Shey, Ryan N. Rakvic, Hau T. Ngo, T. Owens Walker, Thomas W. Tedesso, Justin A. Blanco, Kevin D. Fairbanks
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