[問題] 印出return addr

作者: HowLeeHi (處處留心皆正妹)   2015-01-10 21:46:38
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
linux+gcc
問題(Question):
突然想來寫程式印出function的return address
可是我發現程式印不出來
有找到gcc的calling convention如下
parameter...
parameter 3
parameter 2
parameter 1
return address
ebp
local var 1
local var 2
local var 3
local var ...
我試著在main function去呼叫的函數裡面宣告一個local var 1
利用這個local var 1的指標位置加上偏移值
可是都沒找到該回到的main address,但是有找到傳入的參數
我在想傳入的參數和local var 1之間應該會有一段記憶體的內容
和我
printf("%p\n",main);
印出來的值是一樣的?
還是說return addr沒有辦法這樣找到呢?
thanks!
作者: PkmX (阿貓)   2015-01-10 21:57:00
你有先用gdb看過執行時的stack長怎樣嗎?搞不好其實function被inline所以那個AR根本就不存在...另外gcc本身就有提供__builtin_return_address(0)可以使用而且就算存在 值也不可能和main一樣啊 你一定是回到main執行之後的某一個地方 不太可能是main的prologue
作者: HowLeeHi (處處留心皆正妹)   2015-01-11 02:56:00
對厚... 沒想到這點,感謝
作者: dirkc (3781615)   2015-01-11 11:18:00
不要開-fstack-protector-all:codepad.org/RjgAOLjB註解有個地方筆誤,不是4 bytes,是sizeof(void*) bytes
作者: HowLeeHi (處處留心皆正妹)   2015-01-12 06:26:00
感謝,我把那變數宣告成char,然後眼殘沒看到各別輸出T_T後來仔細看有找到了

Links booklink

Contact Us: admin [ a t ] ucptt.com