2011-05-17 100 views
2

我正在學習Win32API。 我的程序有兩個功能。 我嘗試在VC++中使用調試模式。當我調用dumy函數時,我設置了一個斷點如何在VC++中獲取函數的實際地址

void CALLBACK Dummy(){ 

    printf("\n Hello Dummy Func!"); 
} 

////////////////////////////////////////////////////////////////////////// 

int _tmain(int argc, _TCHAR* argv[]){ 

     (breakPoint) Dummy(); 
} 

當我調用dumy()函數時。程序跳轉到地址012110D7作爲流動代碼

Dummy: 
012110D7 jmp   Dummy(12113A0h) 

而虛擬函數的真實地址是12113A0h 我的問題是如何獲得虛擬函數的真實地址是12113A0h 當我在釋放模式運行的解決了這個問題。 這是我第一次加入StackOver流程。我希望每個人都能幫助我。謝謝 !! BUZZ

回答

5

此jmp指令由鏈接器插入以支持Edit配置中的Edit + Continue。這允許您在調試時編輯和編譯代碼。通過jmp指令的額外間接允許生成不同版本的函數,更改jmp目標以使更改生效。

打開編輯並繼續關閉項目+屬性,鏈接器,常規,啓用增量鏈接=否

+0

謝謝:X。當我添加靜態修改器,然後我的問題解決了 – BabyCat 2011-05-17 20:56:03