我想在堆上为每个函数调用分配一个堆栈帧,但为此我需要修改每个函数的堆栈基指针。
有没有办法在 Linux 下获取该指针并在 C 中修改它?
手动修改 ebp 的唯一(实用)方法是内联汇编或仅在汇编中编写函数。如果你有一个汇编函数,你可以做这样的事情(我对 x86 汇编没有什么经验,仅供参考)
; void function(void* heapPtr)
function:
push ebp
mov reg, esp
mov esp, [esp+4]
mov ebp, esp
...
mov esp, reg
pop ebp
ret
看看功能alloca()
。不推荐使用它,但大多数编译器都有它的实现。