ARM Thumb2 寄存器使用

逆向工程 拆卸 部件 手臂 拇指2
2021-06-28 07:47:31

我正在反转 ARM Thumb2 代码。

我正在寻找一个表格,显示哪些寄存器用于将参数传递给函数,哪些寄存器必须在函数结束后保存。

顺便说一句,如果我push r5-r9在函数的开头和函数pop r5-r9的末尾看到,那些寄存器是否保存了?

2个回答

这一切都记录在 ARM 体系结构过程调用标准 (AAPCS) ARM IHI0042 中可能有更新的版本。简短版本:R0-R3 用于传递参数,R12 是用于过程调用(链接器事物等)的临时寄存器,其他所有内容都必须由使用它的函数保留。

通常,该push r5-r9指令是一种将这些寄存器的内容(即r5, r6, r7, r8, r9pop r5-r9保存在堆栈上的方法,然后在离开函数堆栈帧之前恢复保存的值。

当您想要在堆栈框架内操作非易失性寄存器并符合 ABI 时,这是非常常见的行为。在编译器生成的汇编代码中经常看到这些方式。