【发布时间】:2021-12-10 16:48:00
【问题描述】:
Heading ##用于 Intel CPU 但用于 ARM/Aaarch64 CPU 的 eip、rip 寄存器等效于什么?
我需要翻译为使用 32 位 eip 或 64 位 rip 寄存器的 Intel CPU 编写的应用程序。
那些方法使用英特尔寄存器:
函数GetInstructionPointerRegisterValue --> 使用:regs32[eip] 或 regs64[rip]。
函数 GetStackBasePointerRegisterValue --> 使用:regs32[ebp] 或 regs64[rbp]
函数GetStackPointerRegisterValue --> 使用:regs32[UESP] 或 regs64[rsp]。
我应该为 ARM ARM/Aaarch64 使用什么类似的寄存器?
是否存在 x86/amd64 寄存器与 arm/aarch64 寄存器的比较和等效表?
谢谢。
【问题讨论】:
-
寄存器名为
PC,但它不是通用寄存器。请注意,作为独立的体系结构,x86 和 AArch64 寄存器之间并没有真正的 1:1 对应关系。您可以在 x86 寄存器和您想要的 31 个通用寄存器之间使用任何分配,尽管SP应该保持SP。如果你能告诉我你想做什么,也许我可以提供更直接的帮助。 -
ARM 具有范围有限的 PC 相对寻址模式。我假设 AArch64 也可以,但它也有
adrp等用于将 PC 相对地址生成到另一个寄存器中,例如 x86-64 RIP 相对 LEA。 -
@fuz :谢谢,我会用电脑试试。它适用于适用于 x86-64 并且需要通过 asm 寄存器访问 cpu 的 Pascal fpc 调试器程序。例如:函数 GetInstructionPointerRegisterValue 使用:regs32[eip] 或 regs64[rip]。 GetStackBasePointerRegisterValue 使用:regs32[ebp] 或 regs64[rbp]。 GetStackPointerRegisterValue 使用:regs32[UESP] 或 regs64[rsp]。
-
@Peter:好的,我也会尝试使用 adrp。稍后再写给你
标签: assembly arm arm64 eip program-counter