将函数和地址列表导入 WinDbg

逆向工程 艾达 风袋 符号
2021-06-27 05:54:50

当我有一个没有符号的内核模块时,我通常会首先在 IDA 中打开它并为一些子例程(那些我感兴趣的子例程)命名。

由于我更喜欢​​使用普通的 WinDbg(而不是 IDA 集成的 WinDbg)进行内核调试,因此我希望 WinDbg 能够识别 IDA(和我)为这些地址提供的名称。这样,a) 我可以按名称中断这些函数,按名称更改变量,并且 b) WinDbg 的输出和视图会更好地阅读(在堆栈跟踪等中)。

不幸的是,IDA 没有“创建 PDB”功能,我什至没有看到将地址导入 WinDbg 的非 PDB 方式。

想法,有人吗?

2个回答

此页面包含一个 IDC 脚本和一个 Windbg 扩展来转储名称和一个 WinDbg 扩展来将这些名称加载到 WinDbg。

编辑以解决@OzgurH 的评论

是的,idc 和 AddSyntheticSymbol 实际上很慢,实际上从 idc 获取名称列表以及边界是乏味的(也是在 idafree 5 中完成的,它在一段时间内不可用,现在只有 ida free7 可用,它只有 64少量

所以我还没有检查太多

但我只是写了另一个windbg扩展并利用windbg脚本执行命令行添加正确的名称和大小也通过使用这种方法我可以有一个可重用的反向符号数据库

我已经把源/编译设置/预编译的二进制在github上这里

因为这与原始查询无关,并且
是我在第一个答案中编辑的贴标机 windbg 扩展的各种实验,所以
我将其添加为新答案而不是编辑我的原始答案,
因为 AddSyntheticSymbol 的性能问题批量添加 出现了我编写了一个 6 位数的小 Windbg 脚本文件,我可以用它来测试性能


如果windbg可以在第一轮的11秒内添加500个符号,那么添加符号所需的时间似乎呈对数增加,
接下来的500
需要13秒,第三轮500个符号需要16秒
我中断了测试当我添加第 20 轮符号时,加载符号 9500 到 10000 需要大约 50 秒

这是编写windbg脚本文件的小python脚本

buff = []
j=0
k=1
for i in range(0,100000,1):
    j=j+1
    buff.append("!label str_%s %08x 1 xul\n" % ( str(i).rjust(8,'0') , i ) )
    if(j == 500):
        buff.append("%s %d symbols added\n" % (".echotime;.echo ",j*k))
        j = 0
        k = k+1
with open ("lab100k.txt","w") as txt:
    txt.writelines(buff) 

这将创建一个包含 100200 个使用 !label extcmd 命令的文件

wc -l lab100k.txt
100200 lab100k.txt

grep -c echotime lab100k.txt
200

tail -n 3 lab100k.txt
!label str_00099998 0001869e 1 xul
!label str_00099999 0001869f 1 xul
.echotime;.echo  100000 symbols added

加载标签扩展并执行此windbg脚本并在标记10000地址后将其切断,时间范围如下

0:021> $$>a< lab100k.txt
Debugger (not debuggee) time: Tue Sep 22 23:58:52.053 2020 
500 symbols added
Debugger (not debuggee) time: Tue Sep 22 23:59:03.468 2020 
1000 symbols added
Debugger (not debuggee) time: Tue Sep 22 23:59:16.983 2020 
1500 symbols added
Debugger (not debuggee) time: Tue Sep 22 23:59:32.546 2020 
2000 symbols added
Debugger (not debuggee) time: Tue Sep 22 23:59:50.225 2020 
2500 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:00:10.133 2020 
3000 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:00:32.502 2020 
3500 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:00:57.303 2020 
4000 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:01:23.955 2020 
4500 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:01:52.593 2020 
5000 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:02:22.930 2020 
5500 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:02:55.546 2020 
6000 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:03:30.068 2020 
6500 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:04:06.521 2020 
7000 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:04:45.134 2020 
7500 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:05:25.709 2020 
8000 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:06:08.456 2020 
8500 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:06:53.301 2020 
9000 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:07:40.663 2020 
9500 symbols added
Debugger (not debuggee) time: Wed Sep 23 00:08:29.967 2020 
10000 symbols added

符号的结果如下

0:021> x xul!str_000100*
50462710          xul!str_00010000 = <no type information>
50462711          xul!str_00010001 = <no type information>
50462712          xul!str_00010002 = <no type information>
50462713          xul!str_00010003 = <no type information>
50462714          xul!str_00010004 = <no type information>
50462715          xul!str_00010005 = <no type information>
50462716          xul!str_00010006 = <no type information>
50462717          xul!str_00010007 = <no type information>
50462718          xul!str_00010008 = <no type information>
50462719          xul!str_00010009 = <no type information>
5046271a          xul!str_00010010 = <no type information>
5046271b          xul!str_00010011 = <no type information>
5046271c          xul!str_00010012 = <no type information>
5046271d          xul!str_00010013 = <no type information>
5046271e          xul!str_00010014 = <no type information>
5046271f          xul!str_00010015 = <no type information>
50462720          xul!str_00010016 = <no type information>
50462721          xul!str_00010017 = <no type information>
50462722          xul!str_00010018 = <no type information>
50462723          xul!str_00010019 = <no type information>
50462724          xul!str_00010020 = <no type information>
50462725          xul!str_00010021 = <no type information>
50462726          xul!str_00010022 = <no type information>
50462727          xul!str_00010023 = <no type information>
50462728          xul!str_00010024 = <no type information>
50462729          xul!str_00010025 = <no type information>
5046272a          xul!str_00010026 = <no type information>
5046272b          xul!str_00010027 = <no type information>
5046272c          xul!str_00010028 = <no type information>