小编use*_*149的帖子

.pdb中的函数地址与.exe不同,为什么?

我通过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;
}
Run Code Online (Sandbox Code Playgroud)

但VS2008的消息代码中此函数的地址为004116E0

int _tmain( int argc, const TCHAR* argv[] )
{
    004116E0  push        ebp  
    004116E1  mov         ebp,esp 
    ...
{
Run Code Online (Sandbox Code Playgroud)

然后我试图通过将2个不同的地址传递给SymGetSymFromAddr64来验证结果,我得到了相同的funcitun符号,唯一的区别是PIMAGEHLP_SYMBOL64的地址成员,一个是100116e0而另一个是4116E0.我还尝试通过microsoft的dbh.exe验证它,命令是

load TestSymbolLookup.pdb
TestsymbolLookup [1000000]:n main
addr   : 10116e0
name   : main
size   : b2c
flags  : 0
type   : 2
modbase: 1000000
value  : …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi windbg dbghelp

3
推荐指数
1
解决办法
1050
查看次数

标签 统计

c++ ×1

dbghelp ×1

winapi ×1

windbg ×1

windows ×1