如何将 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
我有一个包含每行地址的文件。现在我想对文件中的每个地址应用某个 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