2010-12-03 166 views
0

我一直在調試一個使用kernel32.dll中的「GetThreadContext」的進程(在C++/windows中)。
我注意到,我能得到它的地址與VS2008調試器和kernel32.dll

unsigned long address = (unsigned long)(&GetThreadContext); 

,但是當我看着加載的模塊選項卡 - 我看到了未加載kernel32.dll中的符號!
VS2008如何知道「GetThreadContext」的地址?
我怎樣才能做到這一點,而沒有PDB?
謝謝:)

+2

GetProcAddr(http://msdn.microsoft.com/en-gb/library/64tkc9y5%28v=VS.80%29.aspx)也許?我從來沒有使用它,所以我不完全確定這一點。 – BlackBear 2010-12-03 19:57:09

+0

好的,謝謝... :) – Idov 2010-12-03 20:11:26

回答

3

這適用於同樣的原因,

GetThreadContext(hThread, lpContext); 

作品。代碼中使用的命名函數必須在鏈接時解析,否則鏈接將失敗。無論您是使用&還是打電話給他們,都無所謂。在運行時,加載DLL,然後函數名稱解析爲進程中的特定地址。

PDB文件僅用於在調試過程中提供增強的符號信息。通常,它們不會在運行時使用。

[我忍不住想我錯過了這個問題。告訴我,如果這不是你的問題。]