dbghelp -通过名称获取结构符号
dbghelp - Get struct symbol by name
我正在构建一个符号服务,我希望能够打印结构变量和它们的偏移量。我正在加载所需的pdb,并试图找到一个适合给定掩码的结构体。例如,我想获得结构体_RTL_CRITICAL_SECTION
的详细信息。
在使用windbg
时,我使用命令dt MSVCP120!_RTL_CRITICAL_SECTION
并获得结构信息(正是我想要的)。但是,当我使用代码搜索符号时:
SymEnumSymbols(GetCurrentProcess(), base_addr,"MSVCP120!_RTL_CRITICAL_SECTION", enum_symbols_callback, NULL);
BOOL CALLBACK symbol_processor::enum_symbols_callback(PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext)
{
printf("Name = %sn", pSymInfo->Name);
return TRUE;
}
没有打印…意思是,面具没有对手…当掩码是一个函数时(例如"MSVCP120!std::tr2::sys::_Open_dir"
)
那么,我如何得到一个结构体的符号…?
谢谢!
编译前文件夹的内容
:>ls -l
-rw-rw-rw- 1 Admin 0 459 2015-09-10 10:23 structshow.cpp
来源:>cat structshow.cpp
#include <windows.h>
#include <dbghelp.h>
#include <stdio.h>
#pragma comment (lib,"dbghelp.lib")
BOOL CALLBACK mycallback(PSYMBOL_INFO pSymInfo,ULONG,PVOID){
printf("%sn",pSymInfo->Name);
return true;
}
int main(){
HMODULE hmod = LoadLibraryA("c:\windows\system32\ntdll.dll");
HANDLE hproc = GetCurrentProcess();
SymInitialize(hproc,"F:\symbols",TRUE);
SymEnumTypesByName(hproc,(ULONG64)hmod,"*!_R*",mycallback,0);
return 0;
}
使用 编译
:>..compile.bat
:>if "C:Program FilesMicrosoft Visual Studio 10.0VC" == "" ()
:>cl /Zi /EHsc /nologo /W4 /analyze *.cpp /link /RELEASE structshow.cpp
:>ls -l
编译后文件夹内容
-rw-rw-rw- 1 Admin 0 459 2015-09-10 10:23 structshow.cpp
-rwxrwxrwx 1 Admin 0 89088 2015-09-10 10:29 structshow.exe
-rw-rw-rw- 1 Admin 0 21081 2015-09-10 10:29 structshow.obj
-rw-rw-rw- 1 Admin 0 1002496 2015-09-10 10:29 structshow.pdb
-rw-rw-rw- 1 Admin 0 94208 2015-09-10 10:29 vc100.pdb
使用最新dbghelp.dll
:>copy xxxxdbghelp.dll .
1 file(s) copied.
:>echo "do not use system dbghelp.dll it is
outdated SymbolEnumTypesbyName is available in
dbghelp version 6.8 and above only "
执行编译后的二进制文件
:>structshow.exe
_RTL_USER_PROCESS_PARAMETERS
_RTL_CRITICAL_SECTION <----------------------
_RTL_STACK_TRACE_ENTRY
_RTL_TRACE_BLOCK
_RTL_CRITICAL_SECTION_DEBUG
_RTL_DRIVE_LETTER_CURDIR
_RTL_TRACE_DATABASE
_RTL_TRACE_SEGMENT
相关文章:
- 从字符串中获取结构的大小
- 获取结构 c++ 中元素的索引
- 如何获取结构C++的输入
- 使用加速融合获取结构名称
- 如何使用值获取结构的索引
- 如何获取结构体成员的地址
- 从行分析中获取结构
- 获取结构的 UUID
- 如何从 QMetaType 获取结构成员的名称
- 在发送/获取结构时使用 streambuf
- 无法获取结构 C# 的指针
- 如何在LLVM中获取结构成员的值?
- 如何从命名管道获取结构化数据并将其写入Qt中的qtableview
- 如何获取结构的元素作为类型提升::shared_ptr
- C++-如何获取结构的最后一个成员类型以及从现有对象访问它的方法
- 在c++中获取结构的参数名称
- 当我尝试获取结构成员的地址时,会发生奇怪的事情
- 获取结构数组 c++ 中的元素数
- 如何获取结构或类的尾随填充的大小
- 正在获取结构的实际大小