[IMAGEHLP_SYMBOL64][1] *pSym = NULL;
[IMAGEHLP_LINE64][2] Line;
STACKFRAME64 s;
int d = 0;
//In my code I obtain the return address from the stack frame of function foo() which was called from function bar() and assign it to s.AddrPC.Offset. Now I call -
SymGetLineFromAddr64(this->m_hProcess, s.AddrPC.Offset, &(d), &Line)
SymGetSymFromAddr64(this->m_hProcess, s.AddrPC.Offset, &(d), pSym))
//We pass the current process HANDLE
//pSym->Name = bar
这些包含哪些地址?
Line.Address;
pSym->Address;
找到了! pSym->Address 给出函数名的虚拟地址
很长一段时间以来,我一直在努力解决这个问题。任何帮助将不胜感激。
这是您要查找的内容:
来自 help page ,IMAGEHLP_SYMBOL64
的结构如下:
typedef struct _IMAGEHLP_SYMBOL64 {
DWORD SizeOfStruct;
DWORD64 Address;
DWORD Size;
DWORD Flags;
DWORD MaxNameLength;
TCHAR Name[1];
} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
Address
是符号的地址。
在您的情况下,pSym->Address
似乎是函数名称的虚拟地址。
这个问题和StackWalk64 on Windows - Get symbol name也很相似.
我是一名优秀的程序员,十分优秀!