C - 修改堆栈基址指针地址

时间:2012-04-08 17:43:39

标签: c linux pointers stack

我想在堆上为每个函数调用分配一个堆栈帧,但为此我需要修改每个函数的堆栈基指针。

有没有办法获得该指针并在Linux下用C修改它?

2 个答案:

答案 0 :(得分:0)

手动修改ebp的唯一(实用)方法是内联汇编或只是在汇编中编写函数。如果你有一个汇编函数,你可以做这样的事情(我对x86汇编fyi并不熟悉)

; void function(void* heapPtr)

function:
    push ebp
    mov  reg, esp
    mov  esp, [esp+4]
    mov  ebp, esp
    ...
    mov  esp, reg
    pop  ebp
    ret

答案 1 :(得分:-1)

查看函数alloca()。不建议使用它,但大多数编译器都有它的实现。