首页
社区
课程
招聘
[原创]利用 windbg 脚本动态调试代码
发表于: 2013-4-6 09:22 4529

[原创]利用 windbg 脚本动态调试代码

2013-4-6 09:22
4529

利用脚本可以自动设置断点,并暂停之后处理事务是核心。不用一对一检查
1.先编写代码 windbgTest.cpp ,编译后一定要保留windbgTest.pdb 文件,代码如下

#include "stdafx.h"
int main(int argc, char* argv[])
{
        char buf[][5]={
                {"buf1"},
                {"buf2"},
                {"buf3"}};
        for(int i=0;i<3;i++)
        {
                printf("%s\n",buf[i]); //要检查输出内容
        }
        return 0;
}

2.编写windbg 脚本 SRCIPT_WINDBGTEST_DEBUG.TXT , 内容如下

$$===================================================================
$$    $$&gt&ltD:\!Prog\winDBG\windbgTest\SRCIPT_WINDBGTEST_DEBUG.txt
$$    测试结束后 .logclose
$$===================================================================
.logopen D:\!Prog\winDBG\windbgTest\windbgTest.log
bp windbgTest!printf "da edx;g"  <----暂停后要做的事务

3.打开windbg,用户模式打开windbgTest.exe,命令窗口中
输入$$><D:\!Prog\winDBG\windbgTest\SRCIPT_WINDBGTEST_DEBUG.txt
然后正常运行就可以自动记录 printf 函数中的内容
最后不要忘记关闭日志文件 windbg命令窗口中输入 .logclose

CommandLine: D:\!Prog\winDBG\windbgTest\Debug\windbgTest.exe
Symbol search path is: D:\WinDDK\Symbols_Full
SRV*D:\WinDDK\Symbols_Dynamic* http://msdl.microsoft.com/download/symbols
Executable search path is:
ModLoad: 00400000 00426000   windbgTest.exe
ModLoad: 7c920000 7c9b6000   ntdll.dll
ModLoad: 7c800000 7c91e000   C:\WINDOWS\system32\kernel32.dll
(f30.598): Break instruction exception - code 80000003 (first chance)
eax=00241eb4 ebx=7ffd6000 ecx=00000001 edx=00000002 esi=00241f48 edi=00241eb4
eip=7c92120e esp=0012fb20 ebp=0012fc94 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
ntdll!DbgBreakPoint:
7c92120e cc              int     3
0:000> $$><D:\!Prog\winDBG\windbgTest\SRCIPT_WINDBGTEST_DEBUG.txt <---手动输入
Opened log file 'D:\!Prog\winDBG\windbgTest\windbgTest.log'
*** WARNING: Unable to verify checksum for windbgTest.exe
0:000> g                     <---自动记录printf的内容
0012ff70  "buf1"
0012ff75  "buf2"
0012ff7a  "buf3"
eax=00000000 ebx=00000000 ecx=7c800000 edx=7c99e120 esi=7c92de6e edi=00000000
eip=7c92e514 esp=0012fe54 ebp=0012ff50 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!KiFastSystemCallRet:
7c92e514 c3              ret
0:000> .logclose
Closing open log file D:\!Prog\winDBG\windbgTest\windbgTest.log

4.打开log文件验证结果

Opened log file 'D:\!Prog\winDBG\windbgTest\windbgTest.log'
*** WARNING: Unable to verify checksum for windbgTest.exe
0:000> g
0012ff70  "buf1"
0012ff75  "buf2"
0012ff7a  "buf3"
eax=00000000 ebx=00000000 ecx=7c800000 edx=7c99e120 esi=7c92de6e edi=00000000
eip=7c92e514 esp=0012fe54 ebp=0012ff50 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!KiFastSystemCallRet:
7c92e514 c3              ret
0:000> .logclose
Closing open log file D:\!Prog\winDBG\windbgTest\windbgTest.log

下载测试代码包括脚本 http://files.cnblogs.com/nlsoft/windbgTest.rar


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 6
支持
分享
最新回复 (1)
雪    币: 38
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
WINDBG 是个好东西,配合虚拟机更好
2013-4-20 21:08
0
游客
登录 | 注册 方可回帖
返回
//