2012-06-02 42 views
2

想象這個虛假的程序:在Visual Studio debugmode編譯的可執行文件:JMP的功能體,而不是直接地址在通話

void foo (void) 
{ 
    // anything 
} 

int main() 
{ 
    foo(); 
    return 0; 
} 

當使用Visual Studio調試模式下進行編譯,編譯器生成某種「功能地圖「或者叫它。因此,例如當您在調試器中關注foo(),或者嘗試通過& foo檢索函數的偏移量時,您會發現自己處於jmp的「列表」中,當您再次關注它時會導致你到實際的功能體。

我的問題是: 是否有可能爲單選功能禁用此功能,以便& foo將地址返回給函數體,而不是jmp。當然不禁用調試模式。

如果不是,哪個標誌啓用/禁用整個程序?

在此先感謝!

編輯用戶SIGTERM: enter image description here

+0

「你發現自己」據我所知,這沒有發生,並且沒有「跳躍列表」。除非你用一些嚴肅的例子來支持你的觀點,否則我不得不說你可能誤解了一些非常基本的東西。 – SigTerm

+0

現在增加了一張圖片...我很抱歉假設有人會成功回答我的問題,應該知道我在說什麼...畢竟我不知道正確的術語,這就是爲什麼我在這裏,而不是在谷歌.. 。 – Andy

+0

這是不可能的。當涉及動態加載模塊時,對於加載程序來說,這將會花費太多工作量,因爲每次調用動態加載模塊中的函數都需要進行修補。相反,只需在導入地址表中修補單個jmp指令很方便。對於不能保證在任何特定地址加載的可執行文件,情況也是如此。 – Superman

回答

相關問題