1. 程式人生 > >檢驗進程地址空間中棧的大小

檢驗進程地址空間中棧的大小

ulimit -s 基址 源碼 ret limit ack 調試 void

目的:

  • 學習objdump,gdb調試
  • 檢驗進程地址空間中進程棧的大小
    首先我們通過ulimit -a查看進程棧的大小

技術分享圖片

得知棧的大小是8192kb

那麽實際情況棧的大小也是如此嗎?
為了確認棧的大小,我們使用無限遞歸的方式使得棧溢出,用棧頂減去調用main函數時棧頂的位置,即可獲得棧的大小

void* ptr;

void blow_stack() {
    blow_stack();
} 
int main() {
    asm("mov %%rsp, %0\n": "=r"(ptr));
   
    blow_stack();
    return 0;
}

編譯完後使用objdump -S ./a.out 查看匯編源碼中的main函數

技術分享圖片

main函數首先將棧基址寄存器rbp壓棧,然後講rbp賦值為棧頂寄存器rsp
使用gdb調試gdb ./a.out

技術分享圖片

約等於8196kb(8M),與系統所給的參數基本相符

檢驗進程地址空間中棧的大小