Walid Al-Atabany

34 papers C 4Journal 12Unranked 18
YearRankTypeTitle / Venue / Authors
2026 J jnl
Soft Comput.
Muhammed Sayed Hammad, Vidan F. Ghoneim, Walid Al-Atabany, Mai S. Mabrouk
2026 conf
ICSIE
Zeyad Elshaer, Nada A. Attia, Sahar Selim, Walid Al-Atabany
2026 J jnl
Neural Process. Lett.
Mostafa Kamal, Walid Al-Atabany
2025 J jnl
IEEE Access
Basma A. Mohamed, Nancy M. Salem, Walid Al-Atabany, Lamees N. Mahmoud
2024 conf
NILES
Heidi Ahmed Holiel, Sahar Ali Fawzi, Walid Al-Atabany
2024 conf
NILES
Mahmoud Tamam, Walid Al-Atabany
2023 conf
NILES
Engy N. Eltayab, Walid Al-Atabany, Nancy M. Salem, Lamees N. Mahmoud
2023 conf
IntelliSys (3)
Ahmed Kamel, Ibrahim Sobh, Walid Al-Atabany
2023 conf
NILES
Heidi Ahmed Holiel, Sahar Ali Fawzi, Walid Al-Atabany
2023 J jnl
J. Real Time Image Process.
Alaa AbdAlRahman, Walid Al-Atabany, Ahmed Soltan, Ahmed G. Radwan
2023 C conf
BIBE
Assem K. Elsherif, Mohamed Emam, Asmaa M. Abushady, Mariam Gamaleldin, Walid Al-Atabany, Mohamed El-Hadidi
2023 conf
MEDI Workshops
Nermin Khalifa, Walid Al-Atabany, Sahar Selim
2022 conf
NILES
Asmaa N. Darweesh, Nancy M. Salem, Walid Al-Atabany
2022 C conf
MEDI
Rana Hossam Elden, Vidan Fathi Ghoneim, Marwa M. A. Hadhoud, Walid Al-Atabany
2022 conf
MEDI Workshops
Heba Ali, Mustafa A. Elattar, Walid Al-Atabany, Sahar Selim
2022 conf
NILES
Rana Hossam Elden, Vidan Fathi Ghoneim, Marwa M. A. Hadhoud, Walid Al-Atabany
2022 J jnl
Math. Comput. Simul.
Fatma A. Hashim, Essam H. Houssein, Kashif Hussain, Mai S. Mabrouk, Walid Al-Atabany
2021 conf
NILES
Mona M. Elamir, Mai S. Mabrouk, Walid Al-Atabany
2021 J jnl
Appl. Intell.
Fatma A. Hashim, Kashif Hussain, Essam H. Houssein, Mai S. Mabrouk, Walid Al-Atabany
2021 J jnl
IEEE Access
Ahmed S. El-Hossiny, Walid Al-Atabany, Osama Hassan, Ahmed M. Soliman, Sherif A. Sami
2021 J jnl
IEEE Access
Hassan M. Ahmed, Walid Al-Atabany, Nancy M. Salem
2021 J jnl
Netw. Model. Anal. Health Informatics Bioinform.
Mona M. Elamir, Walid Al-Atabany, Mai S. Mabrouk
2021 conf
NILES
Basma A. Mohamed, Lamees N. Mahmoud, Walid Al-Atabany, Nancy M. Salem
2021 conf
NILES
Maha S. Mohamed, Walid Al-Atabany, Vidan F. Ghoneim
2021 conf
NILES
Abram W. Makram, Nancy M. Salem, Mohamed Tarek I. El-Wakad, Walid Al-Atabany
2021 conf
NILES
Rana Hossam Elden, Vidan F. Ghoneim, Marwa M. A. Hadhoud, Walid Al-Atabany
2020 J jnl
Neural Comput. Appl.
Fatma A. Hashim, Essam H. Houssein, Kashif Hussain, Mai S. Mabrouk, Walid Al-Atabany
2019 J jnl
Future Gener. Comput. Syst.
Fatma A. Hashim, Essam H. Houssein, Mai S. Mabrouk, Walid Al-Atabany, Seyedali Mirjalili
2019 J jnl
IEEE Access
Hossam H. Sultan, Nancy M. Salem, Walid Al-Atabany
2019 C conf
ISCAS
Ahmed Soltan, Pleun Maaskant, Niall Armstrong, Walid Al-Atabany, Lionel Chaudet, Mark Neil, Patrick Degenaar
2017 C conf
BIBE
Muhammed Sayed Hammad, Ayman Mahmoud Khalifa, Walid Al-Atabany, El-Sayed H. Ibrahim
2014 conf
EMBC
Azza S. Hassanein, Ayman M. Khalifa, Walid Al-Atabany, Mohamed Tarek I. El-Wakad, Brian Shapiro, El-Sayed H. Ibrahim
2014 conf
EMBC
Musa Al Yaman, Walid Al-Atabany, Alex Bystrov, Patrick Degenaar
2013 conf
BioCAS
Walid Al-Atabany, Patrick Degenaar
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