記錄一些可能會出現疑問的地方,也歡迎大家指出問題~
0x00.第六章中為什麽是在118個字符出現 fault?不是剛剛覆蓋完old rbp?為什麽還會再等待輸入?
答:經筆者調試輸入118字符後在從main中返回到__libc_start_main之後會有一個跳轉重新跳回main函數(從棧上取地址,剛好是main),因此執行流又重新走回gets,最終在exit中處理io_file時觸發 fault
為什麽會重新調用main?因為gets函數默認會在輸入末尾添加一個\0,形成字符串,因此在我們剛覆蓋完old rbp時其實就已經partial overwrite掉返回地址了,因此又會跳轉到__libc_start_main前面的部分重新調用main