在 Dbghelp.h 中,PSYM_ENUMMODULES_CALLBACK64 是一个指向回调函数的指针类型,用于在64位进程中枚举模块的符号信息。这个回调函数与 PSYM_ENUMMODULES_CALLBACK 类似,但是专为64位系统设计。

下面是一个简单的示例,演示了如何使用 PSYM_ENUMMODULES_CALLBACK64 回调函数:
#include <Windows.h>
#include <Dbghelp.h>
#include <iostream>

// 回调函数的定义
BOOL CALLBACK EnumModulesCallback64(
  PCSTR ModuleName,
  DWORD64 BaseOfImage,
  PVOID UserContext
) {
  std::cout << "Module Name: " << ModuleName << std::endl;
  std::cout << "Base Address: 0x" << std::hex << BaseOfImage << std::endl;
  std::cout << "-----------------------" << std::endl;
  return TRUE;
}

int main() {
  // 初始化符号处理
  SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);
  SymInitialize(GetCurrentProcess(), nullptr, TRUE);

  // 枚举模块
  SymEnumModules(GetCurrentProcess(), nullptr, EnumModulesCallback64, nullptr);

  // 清理符号处理
  SymCleanup();

  return 0;
}

在这个示例中,EnumModulesCallback64 函数被传递给 SymEnumModules 函数,用于枚举当前64位进程的所有模块。每次回调都会提供模块的名称和基地址。在回调函数中,我们简单地打印出这些信息。

请注意,使用符号处理功能需要在链接时包含调试信息,而且调试信息需要与运行时的二进制文件一起。


转载请注明出处:http://www.zyzy.cn/article/detail/26367/Win32 API/Dbghelp.h/PSYM_ENUMMODULES_CALLBACK64