c - 获取栈的起始地址

标签 c assembly x86 inline-assembly

Possible Duplicate:
executing assembly within a function in c++

long getesp() {  
__asm__("movl %esp,%eax");  
}  

void main() {  
printf("%08X\n",getesp()+4);  
}  

为什么esp是在堆栈建立之前打印的?(在pushl %ebp, movl %esp,%ebp之前) 提前致谢

最佳答案

我的猜测:不需要帧,因此在 getesp 中没有分配任何帧。详细信息取决于您使用的编译器和编译器标志。

关于c - 获取栈的起始地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009560/

相关文章:

c - 使用winsock将文件分成 block 并将其作为二进制文件从客户端发送到C中的服务器?

C - 字符串的最佳实践

c++ - 使用 int 10h 从内联汇编打印 c char*

c - 为什么 Linux 不遵循 Unix 系统调用约定?

assembly - JMP 到绝对地址(操作码)

c - 我将如何创建自己的虚拟机?

c - 我怎样才能让 GCC 编译器不优化像 'printf' 这样的标准库函数调用?

c - 如何将 pthread_t id 保存到数组

java - 为什么额外的数据被写入我的输出流以及如何阻止这种情况?

assembly - 什么阻止被调用者清理堆栈?