gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:09 24 4
gpt4 key购买 nike

[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 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也很相似.

关于c++ - 调用 SymGetLineFromAddr64() 和 SymGetSymFromAddr64() WinAPI 函数后,我们得到什么地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4570164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com