• 利用 windbg 脚本动态调试代码


    利用脚本可以自动设置断点,并暂停之后处理事务是核心。不用一对一检查

    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 , 内容如下
    $$===================================================================
    $$    $$><D:\!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
    

    下载测试代码包括脚本
  • 相关阅读:
    Python:Lasso方法、GM预测模型、神经网络预测模型之财政收入影响因素分析及预测
    ARIMA模型构建、预测——基于Python
    家用电器用户行为分析与事件识别学习笔记
    JQData数据提取及MySQL简单操作——基于Python
    android 沉浸通知栏
    PullToRefreshScrollView 修改下拉刷新图标
    Android AlertDialog 设置setSingleChoiceItems不显示列表的原因【setMessage和setSingleChoiceItems不能同时使用】
    图片跑马灯抽奖,本地图片变换简单实现
    android知识点大总结
    Android 面试精华题目总结
  • 原文地址:https://www.cnblogs.com/nlsoft/p/3001803.html
Copyright © 2020-2023  润新知