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

How to apply a CDB debugger command to each line in file?

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

我可以生成一个脚本,其中每一行都是以下形式:

!refs <address> -target

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

有没有更好的方法?

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

.shell -ci "uf calc!WinMain" awk "{print }

我在文件中有 623 地址

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

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

我会做这样的事情

.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