想象這個虛假的程序:在Visual Studio debugmode編譯的可執行文件:JMP的功能體,而不是直接地址在通話
void foo (void)
{
// anything
}
int main()
{
foo();
return 0;
}
當使用Visual Studio調試模式下進行編譯,編譯器生成某種「功能地圖「或者叫它。因此,例如當您在調試器中關注foo(),或者嘗試通過& foo檢索函數的偏移量時,您會發現自己處於jmp的「列表」中,當您再次關注它時會導致你到實際的功能體。
我的問題是: 是否有可能爲單選功能禁用此功能,以便& foo將地址返回給函數體,而不是jmp。當然不禁用調試模式。
如果不是,哪個標誌啓用/禁用整個程序?
在此先感謝!
編輯用戶SIGTERM:
「你發現自己」據我所知,這沒有發生,並且沒有「跳躍列表」。除非你用一些嚴肅的例子來支持你的觀點,否則我不得不說你可能誤解了一些非常基本的東西。 – SigTerm
現在增加了一張圖片...我很抱歉假設有人會成功回答我的問題,應該知道我在說什麼...畢竟我不知道正確的術語,這就是爲什麼我在這裏,而不是在谷歌.. 。 – Andy
這是不可能的。當涉及動態加載模塊時,對於加載程序來說,這將會花費太多工作量,因爲每次調用動態加載模塊中的函數都需要進行修補。相反,只需在導入地址表中修補單個jmp指令很方便。對於不能保證在任何特定地址加載的可執行文件,情況也是如此。 – Superman