Hamdy S. Soliman

26 papers B 3C 2Misc 3Journal 11Unranked 7
YearRankTypeTitle / Venue / Authors
2025 J jnl
Future Internet
Ahshanul Haque, Hamdy S. Soliman
2025 J jnl
Inf.
Tanjim Fatima, Hamdy S. Soliman
2020 J jnl
IEEE Trans. Big Data
Abdelmounaam Rezgui, Nickolas Davis, Zaki Malik, Brahim Medjahed, Hamdy S. Soliman
2011 J jnl
Int. J. Internet Protoc. Technol.
Mohammad Al-Otaibi, Hamdy S. Soliman, Jun Zheng
2011 J jnl
Int. J. Sens. Networks
Hamdy S. Soliman, Mohammad Al-Otaibi
2010 J jnl
Int. J. Sens. Networks
Mohammad Al-Otaibi, Hamdy S. Soliman
2009 conf
SNA
Mohammad Al-Otaibi, Hamdy S. Soliman
2009 B conf
ICCCN
Mohammad Al-Otaibi, Hamdy S. Soliman
2007 J jnl
Inf. Process. Manag.
Ahmed Abdelali, Jim Cowie, Hamdy S. Soliman
2006 J jnl
Appl. Soft Comput.
Hamdy S. Soliman, Mohammed Omari
2006 J jnl
Int. J. Netw. Secur.
Hamdy S. Soliman, Mohammed Omari
2005 conf
PE-WASUN
Hamdy S. Soliman, Mohammed Omari
2005 conf
Q2SWinet
Hamdy S. Soliman, Mohammed Omari
2004 B conf
WCNC
Hamdy S. Soliman, Mohammed Omari
2002 Misc conf
CATA
Hamdy S. Soliman, Chad Peyton
2002 B conf
MASCOTS
Hamdy S. Soliman, Chad Peyton
2001 Misc conf
CATA
Hamdy S. Soliman
2001 Misc conf
CATA
Chad Peyton, Hamdy S. Soliman
2001 conf
Annual Simulation Symposium
Hamdy S. Soliman
1997 J jnl
Appl. Artif. Intell.
Willie Chang, Hamdy S. Soliman
1996 J jnl
Wirel. Pers. Commun.
Willie Chang, Hamdy S. Soliman
1994 C conf
IEA/AIE
Willie Chang, Hamdy S. Soliman, Andrew H. Sung
1994 conf
ICIP (2)
Willie Chang, Hamdy S. Soliman, Andrew H. Sung
1993 conf
ICNN
Willie Chang, Hamdy S. Soliman, Andrew H. Sung
1992 C conf
ICCI
Hamdy S. Soliman, John B. Johnston
1992 conf
Annual Simulation Symposium
Vladimir I. Ivanov, Hamdy S. Soliman
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