[問題] 關於inline hook api的位址計算

看板C_and_CPP (C/C++)作者 (dick901)時間13年前 (2012/07/03 14:32), 編輯推噓4(405)
留言9則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) *[m VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 查了許多資料都表示,hook時更改API前面的5位元組,變為JMP XXXXXXXX, 而XXXXXXXX的計算方式如下: MyFunctionAdress - HookApiAdress - 5 (我自己的函數) (欲hook的API函數) (我推測是JMP XXXXXXXX的指令長度) 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 我實在不是很懂為什麼要那樣計算,希望哪位大大給小弟我一些指點,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.125.97.120

07/03 14:53, , 1F
新 EIP = funcAd -5; 相對 jmp 距離 = 新 EIP - hookAd;
07/03 14:53, 1F

07/03 14:53, , 2F
去查組合語言的資料,然後等著被刪文...
07/03 14:53, 2F

07/03 16:26, , 3F
謝謝樓上的解答,這是在vc上寫的code,是牽涉到asm,所以
07/03 16:26, 3F

07/03 16:26, , 4F
要去組語板發嗎?
07/03 16:26, 4F

07/03 17:44, , 5F
那你起碼也要貼出其他有用到 C/C++ 的內容,才符合版規吧
07/03 17:44, 5F

07/03 17:45, , 6F
剛搞亂,新EIP是 "被hook函數開頭位址 + 5" 才對
07/03 17:45, 6F

07/03 17:49, , 7F
ex: 函數位址 10, 則新EIP=15, 相對距離= X-15 = X-(10+5)
07/03 17:49, 7F

07/03 17:51, , 8F
謝謝p大的詳細說明,下次發文我會注意的。
07/03 17:51, 8F

07/03 19:02, , 9F
不想計算的話,JMP EAX就好了
07/03 19:02, 9F
文章代碼(AID): #1Fyf7gFE (C_and_CPP)
文章代碼(AID): #1Fyf7gFE (C_and_CPP)