[問題] 印出return addr

看板C_and_CPP作者 (處處留心皆正妹)時間11年前 (2015/01/10 21:46), 11年前編輯推噓1(109)
留言10則, 3人參與, 最新討論串1/1
開發平台(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! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.67.69 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1420897603.A.EDA.html ※ 編輯: HowLeeHi (36.226.67.69), 01/10/2015 21:50:52

01/10 21:57, , 1F
你有先用gdb看過執行時的stack長怎樣嗎?
01/10 21:57, 1F

01/10 21:58, , 2F
搞不好其實function被inline所以那個AR根本就不存在...
01/10 21:58, 2F

01/10 21:59, , 3F
另外gcc本身就有提供__builtin_return_address(0)可以使用
01/10 21:59, 3F

01/10 22:00, , 4F
而且就算存在 值也不可能和main一樣啊 你一定是回到main執行
01/10 22:00, 4F

01/10 22:01, , 5F
之後的某一個地方 不太可能是main的prologue
01/10 22:01, 5F

01/11 02:56, , 6F
對厚... 沒想到這點,感謝
01/11 02:56, 6F

01/11 11:18, , 7F
不要開-fstack-protector-all:codepad.org/RjgAOLjB
01/11 11:18, 7F

01/11 16:51, , 8F
註解有個地方筆誤,不是4 bytes,是sizeof(void*) bytes
01/11 16:51, 8F

01/12 06:26, , 9F
感謝,我把那變數宣告成char,然後眼殘沒看到各別輸出T_T
01/12 06:26, 9F

01/12 06:34, , 10F
後來仔細看有找到了
01/12 06:34, 10F
文章代碼(AID): #1KiIr3xQ (C_and_CPP)