在调用SymGetLineFromAddr64()和SymGetSymFromAddr64()WinAPI函数后,我们得到了什么地址?

时间:2010-12-31 12:46:48

标签: c++ winapi

[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给出函数名称的虚拟地址

我一直试图解决这个问题很长一段时间。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

以下是您要找的内容:

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非常相似。