# 调试器(控制台版) **Repository Path**: clear-water/debugger ## Basic Information - **Project Name**: 调试器(控制台版) - **Description**: 一个命令行版的调试器(调试三环程序) - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-23 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 调试器(控制台版) ### 介绍 一个控制台版的调试器,可以调试三环程序,反汇编引擎使用的OD的反汇编引擎 ### 基本命令 | 序号 | 命令名 | 命令码 | 英文说明 | 参数1 | 参数2 | 参数3 | |----|--------|-------|-----------------|------|------|-----------------| | 1 | 单步步入 | t | step | 无 | | | | 2 | 单步步过 | p | step go | 无 | | | | 3 | 运行 | g | run | 无/地址 | | | | 4 | 自动跟踪 | trace | | 起始地址 | 结束地址 | 模块名称(NULL表所有模块) | | 5 | 反汇编 | u | Display Asmcode | 无/地址 | | | | 6 | 显示内存数据 | dd | Display Data | 无/地址 | | | | 7 | 修改内存数据 | e | edit data | 无/地址 | | | | 8 | 一般断点 | bp | break point | 地址 | | | | 9 | 寄存器 | r | register | 无 | | | | 10 | 一般断点列表 | bpl | bp List | 无 | | | | 11 | 删除一般断点 | bpc | clear bp | 序号 | | | | 12 | 硬件断点 | bh | Bp Hard | 地址 | e(执行)/w(写入)/a(访问) | 断点长度(1,2,4) | | 13 | 硬件断点列表 | bhl | Bp Hard List | 无 | | | | 14 | 删除硬件断点 | bhc | Clear Bp Hard | 序号 | | | | 15 | 内存断点 | bm | Bp Memory | 地址 | 长度 | r(读)/w(写) | | 16 | 内存断点列表 | bml | Bp Memory List  | 无 | | | | 17 | 分页断点列表 | bmpl | Bp Page List | 无 | | | | 18 | 删除内存断点 | bmc | Clear bp Memory | 序号 | | | | 19 | 导入脚本 | ls | Load Script | 无 | | | | 20 | 导出脚本 | es | Export Script | 无 | | | | 21 | 退出程序 | q | Quit  | 无 | | | | 22 | 查看模块 | ml | Module List | 无 | | | ### 使用说明 1. 单步步入 命令:t 参数:无 说明:设置单步步入,程序会运行一条指令并断下,如果遇到CALL指令,会断在CALL到的地址处。 2. 单步步过 命令:p 参数:无 说明:设置单步步过,如果遇到的不是CALL指令,程序会运行一条指令并断下;如果遇到CALL指令,会断在CALL指令后的下一条指令处,即CALL内部的指令已经执行完。 3. 运行 命令:g 参数:地址 或 无 说明:让被调试程序直接运行,或运行到参数所指定的地址处。 示例:g 4001008,指定被调试程序运行到4001008地址处断下。 4. 反汇编代码 命令:u 参数:地址 或 无 说明:反汇编出八条被调试程序的汇编指令,参数如果没有指定则从EIP指向的地址向后依次反汇编,参数如果指定则从指定地址处开始进行反汇编。 示例:u 00401017,从00401017地址处反汇编八条汇编指令。 5. 查看内存数据 命令:dd 参数:地址 或 无 说明:从参数指定的地址处显示128个内存字节,如果参数没有指定,则从上一次显示数据的地址处往后继续显示数据。 示例:D 004013A0,从004013A0地址处显示128个字节的数据。 6. 查看寄存器指令 命令:r 参数:地址 或 无 说明:显示寄存器组中各寄存器的值。 示例:r EAX =00000000 EBX =7FFDB000 ECX =0012FFB0 EDX =7C92E514 ESI =00000000 EDI =00000000 ESP =0012FFC4 EBP =0012FFF0 FS =0000003B CS =0000001B DS =00000023 ES =00000023 SS =00000023 EIP =004017D0 CF:0 PF:1 AF:0 ZF:1 SF:0 TF:0 IF:1 DF:0 OF:0 7. 修改内存内容 命令:e 需要修该的内存的首地址 修改后的值 参数1:需要修该的内存的首地址 参数2:修改后的值 示例:e 401000 12345678 8. 设置一般断点 命令:bp 参数:地址 说明:在参数地址指定处下一般断点。 示例:bp 4001023 9. 查看一般断点列表 命令:bpl 参数:无 说明:显示所有的一般断点。 示例:bpl ---------------------一般断点列表--------------------- 序号 地址 代码 类型 0 00401000 CC 用户断点 1 00402000 FF 用户断点 10. 删除一般断点 命令:bpc 参数:一般断点的ID序号 说明:删除参数所指定序号的一般断点。 示例:bpc 1 11. 设置硬件断点 命令:bh 参数一:断点地址 参数二:断点类型。访问、写入、执行三者之一。 参数三:断点长度(可为1,2,4中的一个)。 说明:设置一个由参数所指定的硬件断点。 示例:bh 0400321A e(硬件断点如果是执行类型,可不指定断点长度) bh 0400321A a 2 bh 0400321A w 4 12. 查看硬件断点列表 命令:bhl 参数:无 说明:显示所有的硬件断点。 示例:bpl ---------------------硬件断点列表--------------------- 序号 断点地址 0 00401000 1 00402000 2 00403000 13. 删除硬件断点 命令:bhc 参数:断点序号 说明:删除参数序号所指定的硬件断点。 示例:bhc 1 14. 设置内存断点 命令:bm 参数一:断点地址 参数二:断点类型。读、写入二者之一 参数三:长度 说明:设置一个由参数所指定的内存断点。 示例:bm 0400321A w 2 bm 0400321A 15. 查看内存断点列表 命令:bml 参数:无 说明:显示所有的内存断点。 示例:bml ---------------------内存断点列表--------------------- id type address len 1 Access 00401000 2 2 Write 00402000 3 16. 查看内存断点列表 命令:bmpl 参数:无 说明:显示分页的内存断点。 ---------------------分页断点列表--------------------- PageAddr MmBpId OldAttr NewAttr 00401000 1 00000020 00000001 00402000 2 00000020 00000001 17. 删除内存断点 命令:bmc 参数:断点序号 说明:删除参数(序号)所指定的内存断点。 示例:bmc 2 18. 导入脚本 命令:ls 参数:无 说明:导入一个脚本文件(后缀名为SCP)。会逐行解析脚本文件的命令,并执行该命令。 19. 导出脚本 命令:es 参数:无 说明:将用户操作的所有有效命令导出到一个脚本文件。 20. 自动跟踪 命令:trace 参数1:开始跟踪的起始地址 参数2:停止跟踪的结束地址 参数3:指定需要跟踪的模块 说明: trace 00401230 00401560 Test.exe 00401230-00401560的地址范围内所有单步执行的指令内容全部记录为文本,记录过的地址不用重复记录 21. 退出程序 命令:q 参数:无 说明:直接退出调试器 22. 查询模块 命令:ml 参数:无 说明:查看当前被调试程序的所有的模块的基址和名称 示例:ml id DLLBase DllName 001 00400000 tbm.exe 002 77560000 ntdll.dll 003 752C0000 KERNEL32.DLL 004 74060000 KERNELBA