【问题标题】:What addresses do we get after we call SymGetLineFromAddr64() and SymGetSymFromAddr64() WinAPI functions?调用 SymGetLineFromAddr64() 和 SymGetSymFromAddr64() WinAPI 函数后我们得到什么地址?
【发布时间】:2011-06-01 23:50:44
【问题描述】:
[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 给出函数名的虚拟地址

我一直在努力解决这个问题。任何帮助将不胜感激。

【问题讨论】:

  • 不要编辑您的问题以包含答案,而是在下面写一个实际答案,然后接受。
  • @jalf:这不是一个完整的答案,我不想接受我自己的答案。如果我找到答案,我会删除问题。
  • 从浏览量来看,我认为没有人对这个问题感兴趣 :) 但我理解你的观点,不会删除这个问题。我想给别人一个回答问题并获得分数的机会,而不是自己这样做。

标签: c++ winapi


【解决方案1】:

这是您要查找的内容:

help pageIMAGEHLP_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很相似。

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 2014-10-15
    • 2014-01-22
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多