在 execve 调用一个函数后堆栈如何看?甚至有 return 地址吗?
How does the stack look after execve calls a function? Is there even a return address?
我正在尝试了解当您使用系统调用 execve
调用新函数时堆栈的行为方式。
我知道应该有变量 argc
、argv
和 envp
。最后两个应该是指向包含参数和环境的向量的指针。这些向量也在堆栈框架中。
我正在尝试了解堆栈框架中可能还有什么。具体来说:它是否遵循任何已知的调用约定?有return地址吗?它是否像函数那样存储旧的堆栈指针?
根据 Linux man page:
execve()
does not return on success, and the text, data, bss, and stack of the calling process are overwritten by that of the program loaded.
所以,不,没有return地址,栈帧等
我正在尝试了解当您使用系统调用 execve
调用新函数时堆栈的行为方式。
我知道应该有变量 argc
、argv
和 envp
。最后两个应该是指向包含参数和环境的向量的指针。这些向量也在堆栈框架中。
我正在尝试了解堆栈框架中可能还有什么。具体来说:它是否遵循任何已知的调用约定?有return地址吗?它是否像函数那样存储旧的堆栈指针?
根据 Linux man page:
execve()
does not return on success, and the text, data, bss, and stack of the calling process are overwritten by that of the program loaded.
所以,不,没有return地址,栈帧等