对于进程地址空间中栈大小的检验

为了检验地址空间中进程栈的大小,我们首先使用命令行查看了解进程栈的大小

对于进程地址空间中栈大小的检验

得知栈的大小是8192kb,也就是8M.

那么实际情况也是如此吗?

为了验证我们使用无限递归的方式使得栈溢出,从而获得栈的大小。

 1 void* ptr;
 2 
 3 void blow_stack() {
 4     blow_stack();
 5 } 
 6 int main() {
 7     asm(" mov %%rsp, %0\n": "=r"(ptr));
 8    
 9     blow_stack();
10     return 0;
11 }

编译完后使用

objdump -S ./a.out 

查看汇编源码中的main函数

对于进程地址空间中栈大小的检验

我们发现main函数首先讲寄存器栈基址寄存器rbp压栈,然后讲rbp赋值为栈顶寄存器rsp,如果我们知道栈溢出的位置减去调用main函数时栈的位置也就是调用main函数的rsp(栈从高位向低位增长,main函数首先压栈rbp),就大概知道栈的大小,

使用gdb调试

gdb ./a.out

对于进程地址空间中栈大小的检验

约等于8196kb(8M),与系统所给的参数基本相符。

 

上一篇:成语,谚语翻译


下一篇:初级Java程序员需要掌握哪些主流技术才能拿20K?