[问题] 印出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