3
我從.pdb文件由SymEnumSymbols看看我的函數的地址,該值是0x0100116e0,.pdb中的函數地址與.exe不同,爲什麼?
BOOL CALLBACK SymEnumSymbolsProc(PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext)
{
if(pSymInfo != NULL)
{
// Show the symbol
std::string str = pSymInfo->Name;
if (str.find("main")!=-1)
{
int ss=pSymInfo->Address;
}
}
return TRUE;
}
不過這個功能在VS2008的dissamble代碼地址是004116E0
int _tmain(int argc, const TCHAR* argv[])
{
004116E0 push ebp
004116E1 mov ebp,esp
...
{
然後我試圖通過將兩個不同的地址傳遞給SymGetSymFromAddr64來驗證結果,我預期會得到相同的funcitun符號,惟一的區別是PIMAGEHLP_SYMBOL64的地址成員,一個是100116e0,另一個是4116E0。 我也試圖通過微軟的dbh.exe驗證它,命令
load TestSymbolLookup.pdb
TestsymbolLookup [1000000]:n main
addr : 10116e0
name : main
size : b2c
flags : 0
type : 2
modbase: 1000000
value : 0
reg : 0
scope : SymTagExe<1>
tag : SymTagFunction<5>
index :1
我的主要函數的地址是在TestsymbolLookup.exe唯一的,但爲什麼我得到2個不同的答案???
謝謝你的解釋! – user1991149