Re: [問題] 如何取得下道指令的address
如果你有 source code 會讓大家容易教你
既然你是用 linux + gdb
想必 compiler 是 gcc
那麼 你可以用 __builtin_return_address(0)
取得 return function 的 address
至於如果是下道指令
那就有點困難了
並不像推文說的可以直接用 ebp+4 取得
原因在於 x86 的指令長度不是固定的
所以 除非你願意先 decode 指令
才有辦法知道下一道指令在哪裡
還有 __builtin_return_address 是靜態就算出來了
要動態算的話
那就要像推文說的取 ebp
但要注意 不一定是 ebp
如果你有開最佳化
那就不一定了
總之 最好的方法是把你的 code 貼上來
讓大家看看吧
如果你真的需要動態算 return address
那就要等陰酒有空 在幫你試試看囉~~
※ 引述《abuc (阿布)》之銘言:
: : 推 VictorTom:開發環境是什麼?? VC的話Debug build trace下去, 把 05/19 10:46
: : → VictorTom:disasm window打開就看得到每條指令的address; 不過, 05/19 10:47
: : → VictorTom:一般來說ret後東西錯掉, 你自己操作stack爛掉, 導致 05/19 10:48
: : → VictorTom:stack內容爛掉, 所以回傳位址/值錯的機會比較大. 05/19 10:48
: : → VictorTom:另外, 錯的是什麼?? value?? value如果是一個變數的 05/19 10:49
: : → VictorTom:話, 你應該先用data break找出value哪個時點被誰改 05/19 10:49
: : → VictorTom:變的, 同樣VC有這功能, 其他環境就再研究吧....Orz 05/19 10:49
: 開發環境是 linux + gdb
: "一般來說ret後東西錯掉, 你自己操作stack爛掉, 導致
: stack內容爛掉, 所以回傳位址/值錯的機會比較大."
: 這句我不是很瞭解, stack爛掉指得是什麼東西
: 想請教一下 裡頭提到的data break是什麼樣的方法?
: 發生錯誤的variable, 是一個很簡短的function中的 local var
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.215.176
推
05/21 00:31, , 1F
05/21 00:31, 1F
→
05/21 00:31, , 2F
05/21 00:31, 2F
推
05/21 00:38, , 3F
05/21 00:38, 3F
→
05/21 00:38, , 4F
05/21 00:38, 4F
→
05/21 00:38, , 5F
05/21 00:38, 5F
推
05/21 00:51, , 6F
05/21 00:51, 6F
推
05/21 01:23, , 7F
05/21 01:23, 7F
→
05/21 01:24, , 8F
05/21 01:24, 8F
推
05/21 01:27, , 9F
05/21 01:27, 9F
推
05/21 02:04, , 10F
05/21 02:04, 10F
→
05/21 02:05, , 11F
05/21 02:05, 11F
推
05/21 10:25, , 12F
05/21 10:25, 12F
→
05/21 10:26, , 13F
05/21 10:26, 13F
→
05/22 00:38, , 14F
05/22 00:38, 14F
推
05/22 02:17, , 15F
05/22 02:17, 15F
→
05/22 02:20, , 16F
05/22 02:20, 16F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):