對於進程地址空間中棧大小的檢驗
阿新 • • 發佈:2019-04-17
nbsp 編譯 獲得 調試 main函數 ima spa 令行 obj
為了檢驗地址空間中進程棧的大小,我們首先使用命令行查看了解進程棧的大小
得知棧的大小是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),與系統所給的參數基本相符。
對於進程地址空間中棧大小的檢驗