Symbols 信息
Radare2会自动解析二进制文件中的导入和导出部分,此外,radare2也支持加载调试信息文件,主要是两种格式:DWARF和PDB(针对windows二进制文件)。与许多工具不同,radare2不依赖于Windows API对PDB文件进行解析,因此在支持radare2的平台上都可以加载PDB文件,例如Linux和OS X。
默认情况下会自动加载DWARF调试信息,因为DWARF调试信息会存储在可执行文件中。只有PDB与众不同,它始终以独立的二进制文件存在,因此需要用不同的程序逻辑去处理它。
常见的一种场景是对来自windows发行版的文件进行分析,在此情况下所有的PDB文件都可以从Microsoft server上获得, 这也是radare2分析pdb文件时默认采用的选项。 下面展示的是radare2 所有pdb配置选项:
pdb.autoload = 0
pdb.extract = 1
pdb.server = https://msdl.microsoft.com/download/symbols
pdb.useragent = Microsoft-Symbol-Server/6.11.0001.402使用pdb.server变量可以设置radare2获取PDB文件的地址, radare2可以通过存储在可执行文件头部的GUID尝试获取对应的PDB文件。可以通过分号分隔多个服务器的地址:
e pdb.server = https://msdl.microsoft.com/download/symbols;https://symbols.mozilla.org/在Windows上, 也可以用本地网络共享的路径(UNC paths)作为symbol服务器。
通常情况下不需要改变默认的pdb.useragent变量,不过谁知道会不会有用上它的一天呢。
由于服务器上的PDB文件通常以"cab"格式储存,指定pdb.extract=1代表自动解压这些文件。要注意,这些需要系统上存在"cabextract"工具,以及wget或curl。
你也可以不在radare2完成这些工作, rabin2中有两个很方便的选项:
-P show debug/pdb information
-PP download pdb file for binary-PP根据上面那些pdb.*选项,自动下载二进制文件对应的pdb文件。-P将会转储PDB文件内的内容,在快速了解PDB中存储的符号时还是很有用的。
除了基本的文件打开等操作之外, 还可以通过id命令对PDB文件进行操作:
[0x000051c0]> id?
|Usage: id Debug information
| Output mode:
| '*' Output in radare commands
| id Source lines
| idp [file.pdb] Load pdb file information
| idpi [file.pdb] Show pdb file information
| idpd Download pdb file on remote serveridpi与rabin2 -P是等价的。idp除了可以在静态分析中使用,也可以在debug模式下使用,即使是通过WinDbg调试进程时也可以。
为了简化加载PDB文件的工作,尤其对于那些具有许多DLL的进程,radare2可以自动加载需要的PDB,可以用e pdb.autoload=true选项启用这个特性。接着如果需要在Windows对一些文件进行调试,可以用r2 -d file.exe或r2 -d 2345(attach到pid 2345), 所有相关的PDB文件就会被自动加载了。
另一方面, DWARF信息完全采用自动加载的方式,不需要运行任何命令或设置任何选项:
正如所见的那样, 它将函数名和源码行标信息都加载进来了。
最后更新于
这有帮助吗?