SymEnumSymbols によって .pdb ファイルからメイン関数のアドレスを読み取りました。値は 0x0100116e0 です。
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 のディスサンブル コードでのこの関数のアドレスは 004116E0 です。
int _tmain( int argc, const TCHAR* argv[] )
{
004116E0 push ebp
004116E1 mov ebp,esp
...
{
次に、2 つの異なるアドレスを SymGetSymFromAddr64 に渡して結果を確認しようとしましたが、予想どおり同じ funcitun シンボルを取得しました。唯一の違いは、PIMAGEHLP_SYMBOL64 のアドレス メンバーで、1 つは 100116e0 で、もう 1 つは 4116E0 でした。また、Microsoftの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 つの異なる回答が得られたのでしょうか?