DWORD SymUnDName(
PIMAGEHLP_SYMBOL sym,
LPSTR UnDecName,
DWORD UnDecNameLength
);
参数说明:
- sym: 指向 IMAGEHLP_SYMBOL 结构的指针,其中包含已装饰的符号信息。
- UnDecName: 指向一个字符缓冲区的指针,用于存储未装饰的符号名。
- UnDecNameLength: 未装饰的符号名缓冲区的大小(以字符为单位)。
返回值:
- 如果函数成功,返回未装饰的符号名的长度(以字符为单位),不包括 null 终止符。如果未能解码符号名,或者发生其他错误,返回 0。
使用示例:
#include <windows.h>
#include <dbghelp.h>
#include <iostream>
int main() {
// 初始化符号引擎
SymInitialize(GetCurrentProcess(), nullptr, TRUE);
// 假设有一个已装饰的符号名
IMAGEHLP_SYMBOL symbol;
symbol.SizeOfStruct = sizeof(IMAGEHLP_SYMBOL);
symbol.MaxNameLength = 1024; // 根据实际情况设置
// 替换为实际的已装饰符号名
const char* decoratedName = "?MyFunction@@YAHH@Z";
// 执行符号反解
DWORD undecoratedNameLength = SymUnDName(&symbol, const_cast<char*>(decoratedName), 0);
if (undecoratedNameLength > 0) {
// 为未装饰的符号名分配足够的空间
char* undecoratedName = new char[undecoratedNameLength];
// 再次执行符号反解
undecoratedNameLength = SymUnDName(&symbol, undecoratedName, undecoratedNameLength);
// 输出未装饰的符号名
if (undecoratedNameLength > 0) {
std::cout << "Undecorated Name: " << undecoratedName << std::endl;
}
delete[] undecoratedName;
}
// 清理符号引擎
SymCleanup(GetCurrentProcess());
return 0;
}
在这个示例中,SymUnDName 函数被用于将已装饰的符号名转换为未装饰的符号名。请确保替换 decoratedName 变量的值为实际的已装饰符号名。
转载请注明出处:http://www.zyzy.cn/article/detail/26352/Win32 API/Dbghelp.h/SymUnDName