Re: [問題] 如何取得下道指令的address

看板C_and_CPP作者 (陰酒教你寫程式)時間15年前 (2010/05/20 23:29), 編輯推噓8(808)
留言16則, 4人參與, 最新討論串3/3 (看更多)
如果你有 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
我說的是「function下道指令的位址」....
05/21 00:31, 1F

05/21 00:31, , 2F
不就是ret addr?
05/21 00:31, 2F

05/21 00:38, , 3F
.. 我本來以為他問的是以前病毒那種..
05/21 00:38, 3F

05/21 00:38, , 4F
call locate
05/21 00:38, 4F

05/21 00:38, , 5F
locate: pop ebp ; ...
05/21 00:38, 5F

05/21 00:51, , 6F
把eip的值pop到ebp的作用是?
05/21 00:51, 6F

05/21 01:23, , 7F
這樣 ebp 就是 locate 這個位置的位址了...
05/21 01:23, 7F

05/21 01:24, , 8F
呃 應該是 call 那個指令的位址
05/21 01:24, 8F

05/21 01:27, , 9F
執行call的時候,eip已經變成locate的位址了吧?
05/21 01:27, 9F

05/21 02:04, , 10F
@@ 結果還是弄錯了...是 call 下一個沒錯
05/21 02:04, 10F

05/21 02:05, , 11F
那個我猜應該不是寫在一起的 (不然就如你所說沒啥意思)
05/21 02:05, 11F

05/21 10:25, , 12F
啊~~~ 是寫在一起的 目的是感染以後要 relocate 變數
05/21 10:25, 12F

05/21 10:26, , 13F
但應該跟原PO問的沒啥關係就是了qq
05/21 10:26, 13F

05/22 00:38, , 14F
Ross好可怕 (抖抖
05/22 00:38, 14F

05/22 02:17, , 15F
一定要ebp?pop到其他暫存器應該也行吧?ebp應該跟buffer
05/22 02:17, 15F

05/22 02:20, , 16F
overflow比較有關吧(至少我拿來做jmp ebp)
05/22 02:20, 16F
文章代碼(AID): #1BzLLtTJ (C_and_CPP)
文章代碼(AID): #1BzLLtTJ (C_and_CPP)