调试环境由三个环境变量组成 ① _NT_SOURCE_PATH 目标二进制源代码文件路径 ② _NT_SYBOL_PATH 符号文件目录根节点路径 ③ _NT_DEBUG_LOG_FILE_OPEN 指定用于记录调试会话框日志文件 符号文件由两部分组成 ① 共有符号信息:包含应用程序的函数名、地址、每个局部变量的描述,复合数据类型 ② 私有符号信息:表述类似于局部变量的程序元素,是源代码执行到机器指令映射更加方便,容易 文件符号路径: SRV*C:\Symbols*http://msdl.microsoft.com/download/sysbols CDB.exe调试用户模式应用程序方式 ① CDB.exe启动应用程序 例如:cdb.exe FileName.exe ② 将CDB.exe附加至已经运行的进程里cdb.exe -p ProcessID /cdb.exe -pn FileName.exe ③ CDB.exe针对某个进程进行非入侵式调试 cdb.exe -pv -p ProcessID Cdb.exe -pv -pn FileName.exe
以下命令均在windbg下执行 调试命令行解释及示例: bl 列举已存在的断点 bc breakpoint 删除指定断点 bp FunctionName 在指定的函数起点中设置断点 bp 当前的地址(EIP值)下断点
示例: 依次执行以下命令 bp 现在当前位置下断点 bp WriteFile 给WriteFile函数起点下断点 bl 得到如下结果 bc 0,1 删除ID为0 ,1断点 bl 得到空列表结果
-g 忽略程序的入口断点 -G 忽略程序的终点 CTRL B 组合件 再ENTER 紧急逃生出口,有效阻止系统崩溃 g 执行到下一个断点 t 执行下一条指令,单步步入F8/F11(相当于OD的F7) p 执行到下一条指令,单步步过 F10(相当于OD的F8) gu 执行到当前函数结束并返回到上一函数处 q 退出 检查符号命令 x module!symbol 报告指定符号的地址 x*! 列举当前加载的所有模块 x module!* 列举指定模块所有的符号及其地址 x module!symbol* 列举所有与”arg”通配符过滤器匹配的符号 例如:依次输入以下命令行 0:000> x*! 列举当前加载的所有模块 start end module name 00000000`00400000 00000000`00417000 image00000000_00400000 (deferred) 00000000`74a60000 00000000`74a68000 wow64cpu (deferred) 00000000`74a70000 00000000`74acc000 wow64win (deferred) 00000000`74ad0000 00000000`74b0f000 wow64 (deferred) 00000000`76f30000 00000000`770d9000 ntdll (export symbols) C:\Windows\SYSTEM32\ntdll.dll 00000000`77110000 00000000`77290000 ntdll32 (deferred)