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

看板C_and_CPP作者 (阿布)時間15年前 (2010/05/19 10:42), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/3 (看更多)
您好 想請教一下各位 如何取得function return後的下一道指令位址 因為最近在改一個程式 程式執行到function最後一行 return value; 時就錯了 在猜測是不是因為程式由於某些因素 在執行過程中return後的下一行指令錯了 所以最近想試著取得 function return 後的下一道執行指令的位址和值 並試著去更改位址, 看程式是不是能夠按照所給定的address執行 麻煩各位給予指教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.105.206 ※ 編輯: abuc 來自: 140.123.105.206 (05/19 10:43)

05/19 10:46, , 1F
開發環境是什麼?? VC的話Debug build trace下去, 把
05/19 10:46, 1F

05/19 10:47, , 2F
disasm window打開就看得到每條指令的address; 不過,
05/19 10:47, 2F

05/19 10:48, , 3F
一般來說ret後東西錯掉, 你自己操作stack爛掉, 導致
05/19 10:48, 3F

05/19 10:48, , 4F
stack內容爛掉, 所以回傳位址/值錯的機會比較大.
05/19 10:48, 4F

05/19 10:49, , 5F
另外, 錯的是什麼?? value?? value如果是一個變數的
05/19 10:49, 5F

05/19 10:49, , 6F
話, 你應該先用data break找出value哪個時點被誰改
05/19 10:49, 6F

05/19 10:49, , 7F
變的, 同樣VC有這功能, 其他環境就再研究吧....Orz
05/19 10:49, 7F

05/19 12:04, , 8F
你可以先查 calling convention,看看 return address 被
05/19 12:04, 8F

05/19 12:04, , 9F
存在 runtime stack 的什麼位置。通常這個位置是相對於
05/19 12:04, 9F

05/19 12:05, , 10F
目前 stack pointer 或 frame pointer 的某個距離內。
05/19 12:05, 10F

05/19 23:47, , 11F
backtrace() or __return_address()
05/19 23:47, 11F
文章代碼(AID): #1Byr0Bt1 (C_and_CPP)
文章代碼(AID): #1Byr0Bt1 (C_and_CPP)