如何将CDB调试器命令应用于文件中的每一行?

时间:2016-06-04 18:38:05

标签: windbg

我有一个包含每行地址的文件。现在我想将某个CDB调试器命令(实际上是SOSEX refs)应用于文件中的每个地址。​​

我可以生成一个脚本,其中每一行的格式为:

!refs <address> -target

因此,如果我的原始文件包含10,000个地址,那么该脚本将包含10,000个!refs命令的调用。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

假设我收集了一些这样的地址到文件

wc -l someaddr.txt
623 someaddr.txt

head -n 5 someaddr.txt
00211635
00211637
00211638
0021163a
00211640

tail -n 5 someaddr.txt
0023779c
002377a2
002377a7
002377ac
002377b0

我在文件中有623地址

.foreach /f (place "e:\someaddr.txt") { u place l2 }

假设我想要反汇编每个地址的两条指令

我会做这样的事情

0:000> .foreach /f (place "e:\someaddr.txt") { u place l2 }
calc!WinMain:
00211635 8bff            mov     edi,edi
00211637 55              push    ebp
calc!WinMain+0x2:
00211637 55              push    ebp
00211638 8bec            mov     ebp,esp
calc!WinMain+0x3:
00211638 8bec            mov     ebp,esp
0021163a 81ec580d0000    sub     esp,0D58h
calc!WinMain+0x5:
0021163a 81ec580d0000    sub     esp,0D58h
00211640 a164402600      mov     eax,dword ptr [calc!__security_cookie (00264064)]
calc!WinMain+0xb:
00211640 a164402600      mov     eax,dword ptr [calc!__security_cookie (00264064)]
00211645 33c5            xor     eax,ebp

导致

calc!WinMain+0x772:
0023779c ff1500132100    call    dword ptr [calc!_imp__InvalidateRect (00211300)]
002377a2 e92ba4fdff      jmp     calc!WinMain+0x778 (00211bd2)
calc!WinMain+0x778:
002377a2 e92ba4fdff      jmp     calc!WinMain+0x778 (00211bd2)
002377a7 a1ac402600      mov     eax,dword ptr [calc!calcSQM (002640ac)]
calc!WinMain+0x7fb:
002377a7 a1ac402600      mov     eax,dword ptr [calc!calcSQM (002640ac)]
002377ac 83482004        or      dword ptr [eax+20h],4
calc!WinMain+0x800:
002377ac 83482004        or      dword ptr [eax+20h],4
002377b0 e993a4fdff      jmp     calc!WinMain+0x804 (00211c48)
calc!WinMain+0x804:
002377b0 e993a4fdff      jmp     calc!WinMain+0x804 (00211c48)
002377b5 90              nop

尾巴

Many-to-Many