我可以从 IDAPython 获取加载的 pdb 文件路径吗?

逆向工程 艾达 蟒蛇 ida插件
2021-06-21 18:23:43

IDA Pro 可以自动.pdb从符号服务器下载和加载文件。现在我想编写一个 IDAPython 插件来从.pdb文件中获取一些数据

但是我不知道如何获取已加载.pdb文件的文件路径
我可以使用 IDAPython 获得它吗?

1个回答

我刚刚检查了 idafree 76,但我没有看到 idc 函数来获取 pdb 文件名,
但正如我评论的那样,它打印在标题中,您可以复制粘贴它

.text:0000000140001000 ; Alignment     : default
.text:0000000140001000 ; PDB File Name : C:\xx\Desktop\mulcall\mcall.pdb

或者您可以在.rdata部分 IMAGE_DEBUG_DIRECTORY 中搜索 string(".pdb") 路径通常可用的文本

使用如下 idc 函数

auto cline;
cline = find_text(MinEA()+0x1000,1,0,0,".PDB");
jumpto(cline);
Message("%x\t%s\n" , cline , get_curline());

这应该产生

14000206c .rdata:000000014000206C text "UTF-8",'C:\xxx\Desktop\mulcall\mcall.pdb',0 ; PdbFileName

请注意,这是来自 debug 目录,在恶意软件、剥离、公开等、操纵的二进制文件中可能不正确。

例如,公共 pdb 可能会返回

1802420f0   .rdata:00000001802420F0   text "UTF-8", 'kernelbase.pdb',0 ; PdbFileName

在这种情况下,如 ms 二进制文件的公共 pdbs 最佳选择是使用 dumpbin /pdbpath

dumpbin /pdbpath c:\Windows\System32\KernelBase.dll

Dump of file c:\Windows\System32\KernelBase.dll

File Type: DLL
  PDB file found at 'f:\symbols\kernelbase.pdb\993F0EEA8C3C260F6D52724A7CA166601\kernelbase.pdb'