diff --git a/archinfo/arch_aarch64.py b/archinfo/arch_aarch64.py index d363527..6b4d431 100644 --- a/archinfo/arch_aarch64.py +++ b/archinfo/arch_aarch64.py @@ -22,6 +22,10 @@ class ArchAArch64(Arch): def __init__(self, endness=Endness.LE): super().__init__(endness) + if _unicorn is not None: + unicorn_sp = _unicorn.arm64_const.UC_ARM64_REG_SP + self.uc_regs["xsp"] = unicorn_sp + self.vex_to_unicorn_map[self.sp_offset] = (unicorn_sp, self.bytes) if endness == Endness.BE: self.pcode_id = "AARCH64:BE:64:v8A" self.ida_processor = "armb" diff --git a/tests/test_aarch64.py b/tests/test_aarch64.py new file mode 100644 index 0000000..2c08c6b --- /dev/null +++ b/tests/test_aarch64.py @@ -0,0 +1,14 @@ +from __future__ import annotations + +import pytest + +from archinfo import ArchAArch64 + + +def test_unicorn_stack_pointer_mapping(): + unicorn = pytest.importorskip("unicorn") + arch = ArchAArch64() + unicorn_sp = unicorn.arm64_const.UC_ARM64_REG_SP + + assert arch.uc_regs["xsp"] == unicorn_sp + assert arch.vex_to_unicorn_map[arch.sp_offset] == (unicorn_sp, arch.bytes)