dbghelp的'SymEnumSymbols'的回调中的'symbolSize'参数是什么?

时间:2018-12-27 15:58:04

标签: c dbghelp

我正在使用symEnumSymbol库中的dbghelp函数来获取有关可执行文件中任何malloc符号的详细信息。我需要传递的参数之一是带有以下签名的回调functoin:

BOOL CALLBACK EnumSymProc( 
    PSYMBOL_INFO pSymInfo,   
    ULONG SymbolSize,      
    PVOID UserContext);

我想从这些参数中提取所有数据。

Windows Dev Center提供的关于第二个内容的描述不足:

  

SymbolSize :   符号的大小,以字节为单位。大小是经过计算的,实际上是猜测。在某些情况下,该值可以为零。

我已通过以下方式实现了回调:

BOOL CALLBACK EnumSymCallback(
PSYMBOL_INFO pSymInfo,
ULONG SymbolSize,
PVOID UserContext)
{
    UNREFERENCED_PARAMETER(UserContext);
    printf("Hello from symEnumSymbols!\n");
    printf("%08X %4u %s\n", (unsigned int)pSymInfo->Address, SymbolSize, pSymInfo->Name);
    return TRUE;
}

然后我用这些参数调用SymEnumSymbols

if (!SymEnumSymbols(
    GetCurrentProcess(),            // handler to the process.
    0,
    "*!malloc",         // combination of the last two lines means: Enumerate every 'malloc' symbol in every loaded module - we might change this...
    EnumSymCallback,        
    NULL                // argument for the callback.
))
{
    printf("SymEnumSymbols failed :-(\n");
    DWORD error = GetLastError();
    printf("SymEnumSymbols returned error : %d\n", error);
    return FALSE;
}
printf("SymEnumSymbols succeeded :-)\n");

我得到以下输出:[编辑:我刚刚为free添加了枚举]

Hello from symEnumSymbols!
766300D0   16 malloc
Hello from symEnumSymbols!
0F9BE340   32 malloc
Hello from symEnumSymbols!
7662E0F0   48 free
Hello from symEnumSymbols!
0F9BDFA0   80 free
SymEnumSymbols succeeded :-)

如您所见,第一次malloc符号大小为16,第二次为32。我不确定如何从头获得两个malloc,因为我的可执行文件应该只有一个(我写过源代码),但假设另一个来自编译器或其他东西-这些大小是多少?和为什么它们不同?!

我可以猜到它指定了32位命令还是16位命令,但是我确实没有任何线索,这与free结果无关。感谢您的帮助!

0 个答案:

没有答案