如何找出 RISC 架构上用于堆栈指针的寄存器?

逆向工程 拆卸 风险
2021-07-01 17:37:33

在某些 RISC 架构上,没有堆栈指针寄存器的概念——有一些寄存器,用于保存堆栈指针和堆栈帧的地址,但没有明确说明是什么。

那么,我如何找出在 RISC 架构上用于存储堆栈指针的寄存器?

1个回答

在大多数情况下,即使没有任何硬件/指令支持作为堆栈指针的寄存器,处理器制造商或操作系统设计者都会定义一个 ABI(应用程序二进制接口),其中包含调用子例程的约定. 编译器供应商通常遵守此 ABI,以使他们的代码可以与其他供应商或标准库的代码互换。

关于调用约定维基百科页面包含有关大多数常见处理器的标准约定的信息。以及一些制造商文档的链接。

但是,没有人强迫您使用该确切约定。例如,您可以编写一个 JVM,将 Java 堆栈放在一个寄存器中,将 C/本机堆栈放在另一个寄存器中。或者,您可以将一个寄存器用于调用/返回堆栈,另一个用于函数参数,第三个用于局部变量。硬件并不关心,所以如果你觉得它对你的应用程序有利,你可以这样做;但是,在大多数情况下,不使用标准 ABI 会给您带来麻烦(因为您不能再使用标准库)而不会为您带来任何好处。