1.关于debug
debug是dos、windows提供的实模式程序调试工具;
作用:查看cpu各寄存器的内容、内存情况、在机器码级别追踪程序的运行;
命令:
debug
参数:
    r    ->查看、改变cpu寄存器的内容;
    d    ->查看内存中的内容;
    e    ->修改内存中的内容;
    u    ->将内存中的机器指令翻译成汇编指令;
    t    ->执行一条机器指令;
    a    ->以汇编的格式在内存中写入一条机器指令;
 
2.用r查看、改变cpu寄存器的内容
1)查看cpu寄存器内容
输入命令 debug 进入debug模式
debug
输入参数 r
r
结果:
如上图所示;
可以看到各寄存器对应的值,例如:ax的值为0000、bx的值也是0000;
0740:1000 0000 ;表示cs:ip当前所指向的内存单元地址为0740:1000,该内存单元存放的机器码为0000;对应的汇编指令是 ADD [BX+SI],AL;
 
2)修改寄存器内容
例如:想要将cs:ip指向1000:0;
需要将cs的值改为1000H,ip的值改为0H;
命令:r 待修改的寄存器,enter键确定
r cs
会显示该寄存器的当前值,在冒号“:”后面输入新值即可,然后enter键确定;
ip修改也一样;
如上图所示:修改完成后输入r查看,cs:ip被修改为1000:0;
 
3.用d查看内存信息
1)默认查看
命令:
debug
参数:
d
结果:
参数d后面不加 段地址:偏移地址 ,显示默认地址的内存信息;
每次显示128个内存单元的信息;
分为3部分;左边是内存单元的起始地址;中间是每个内存单元的值;右边是内存单元值对于的ASCII码信息,例如46表示F,74表示t;
 
2)查看特定地址的内存
命令:
debug
参数:d 段地址:偏移地址
d 1000:0
结果:
可以看到,查看的是指定地址的内存信息;
如果再接着输入d,显示后续地址的内存信息,如上图所示,直接输入d显示的是从1000:80开始的内存信息,紧接上一次查询的地址;
 
3)范围查询
参数:d 段地址:偏移地址 结束偏移地址
d 1000:0 8
结果:
 
4.用e改写内存中的内容
1)一起修改
参数:e 段地址:偏移地址 内容1 内容2 ...
例如:将1000:0处开始修改内存信息为 123iLoveC++
e 1000:0 1 2 3 'i' "Love" "C++"
 
2)逐一修改
参数:e 段地址:偏移地址
会从目标地址开始依次显示每一个内存单元的值;
如果需要修改则输入修改的值,空格键确认;不需修改直接按空格键;
修改完成后enter键;
例如:从1000:10处开始修改内存信息为 123i
 
5.用u翻译内存中的内容为汇编指令
参数:u 段地址:偏移地址
u 2000:0
结果:
可以看到,内存中的机器码被翻译成了汇编指令;
 
6.用t执行指令
参数:t
如果要执行目标指令,需要将cs:ip执行目标指令的起始地址;
一次只执行一条指令,如需执行下一条指令需再次输入t;
例如:执行2000:0处的指令;
    将cs设为2000;    ->r cs
    将ip设为0;    ->r ip
    执行第一条指令    ->t
    执行第二条指令    ->t
可以看到执行了两条指令;
分别是修改寄存器ax和bx的值;
 
7.用a以汇编指令的形式修改内存
参数:a 段地址:偏移地址
从目标地址开始将编辑的汇编指令写入内存;
输入汇编指令 enter键确认;
不输入直接按enter键结束编辑;
a 3000:0
结果:
 
8.用段寄存器作段地址
用debug的d命令查看内存信息时命令为:d 段地址:偏移地址;
例如:d 1000:0 用来查看从1000:0开始的内存信息;
如果想查看段寄存器ds所指向的地址:d ds:偏移地址;
具体操作如图:
段寄存器cs、ss也可以这样用;
    d cs:偏移地址    ->查看代码段的信息;
    d ss:偏移地址    ->查看栈段的信息;
其他命令:E、A、U中也可以使用段寄存器;
例如:编辑数据段命令 
e ds:0
 
 
 

debug的基本用法的更多相关文章

  1. Debug.print的用法

    使用Debug.print可以用来更好的调试VBA程序 通过ALT+F11代开VBA编程窗口) 插入模块,接着在窗口中输入以下代码,按F5执行 Sub Excute() Debug.Print * + ...

  2. 关于debug.keystore文件用法以及错误处理

    在开发过程中需要频繁的为测试的同事签名apk,非常很麻烦,把默认debug.keystore文件替换成发布用(生产环境)的签名文件,不用频繁地签名apk文件了.      如果直接使用生产keysto ...

  3. Debug过程中的mock (及display窗口的使用)

    转载:http://m.blog.csdn.net/blog/u012516903/18004965 在debug的时候,有3个地方可以进行mock测试 测试代码如下: 1.使用display窗口 W ...

  4. perl debug

    1. 进入debug模式 # perl -d ./perl_debugger.pl it prompts, DB<1>   2. 查看从第10行开始的代码. 查看函数get_pattern ...

  5. 手把手教你汇编 Debug

    关于汇编的第一篇文章: 爱了爱了,这篇寄存器讲的有点意思 Hello大家好,我是程序员cxuan!我们上篇文章了解了一下基本的寄存器,这篇文章我们来进行实际操作一下. 原文链接:手把手教你汇编 Deb ...

  6. Linux下Awk详解(转载)

    什么是Awk Awk是一种小巧的编程语言及命令行工具.(其名称得自于它的创始人Alfred Aho.Peter Weinberger 和 Brian Kernighan姓氏的首个字母).它非常适合服务 ...

  7. Force.com微信开发系列(二)用户消息处理

    Force.com是国际知名的云平台公司,成功配置好Force.com作为微信公开号的服务端后,接下来需要的任务是处理用户发送的消息.当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML ...

  8. Python 第五篇(下):系统标准模块(shutil、logging、shelve、configparser、subprocess、xml、yaml、自定义模块)

    目录: shutil logging模块 shelve configparser subprocess xml处理 yaml处理 自定义模块 一,系统标准模块: 1.shutil:是一种高层次的文件操 ...

  9. Perl的调试方法

    来源: http://my.oschina.net/alphajay/blog/52172 http://www.cnblogs.com/baiyanhuang/archive/2009/11/09/ ...

随机推荐

  1. Log4j2日志配置详解(2)

    Log4j2日志配置系列之2 1.Configuration 在应用程序代码中插入日志请求需要相当多的计划和工作.观察显示,大约4%的代码用于日志记录.因此,即使是中等大小的应用程序也会在其代码中嵌入 ...

  2. LC 155 Min Stack

    问题描述 Design a stack that supports push, pop, top, and retrieving the minimum element in constant tim ...

  3. spark教程(18)-sparkSQL 自定义函数

    sparkSQL 也允许用户自定义函数,包括 UDF.UDAF,但没有 UDTF 官方 API class pyspark.sql.UDFRegistration(sparkSession)[sour ...

  4. Elastic Search对Document的搜索

    在ES中使用的重点.ES中存储的数据.核心就是为了提供全文搜索能力的.搜索功能非常重要.多练. 1 query string searchsearch的参数都是类似http请求头中的字符串参数提供搜索 ...

  5. X86逆向10:学会使用硬件断点

    本节课我们将学习硬件断点的使用技巧,硬件断点是由硬件提供给我们的一组寄存器,我们可以对这些硬件寄存器设置相应的值,然后让硬件帮我们断在需要下断点的地址上面,这就是硬件断点,硬件断点依赖于寄存器,这些寄 ...

  6. 深入理解计算机系统 第十章 系统级I/O 第二遍

    了解 Unix I/O 的好处 了解 Unix I/O 将帮助我们理解其他的系统概念 I/O 是系统操作不可或缺的一部分,因此,我们经常遇到 I/O 和其他系统概念之间的循环依赖.例如,I/O 在进程 ...

  7. 转:GitHub团队项目合作流程

    转自:https://www.cnblogs.com/schaepher/p/4933873.html GitHub团队项目合作流程   已在另一篇博客中写出关于以下问题的解决,点此进入: 同步团队项 ...

  8. vue入门:(组件)

    模板:(template)模板声明了数据和最终展现给用户的DOM之间的映射关系. 初始数据:(data)一个组件的初始数据状态.对于可复用的组件来说,通常是私有的状态. 接收外部参数:(props)组 ...

  9. JQuery 判断复选框是否选中

    $("input").attr("checked") == "checked" or "undefined" $(&qu ...

  10. docker一键搭建Nginx+PHP环境(含自动部署命令)

    文章的主要部分是一步一步的教程,文章的最后是我整理好的一键安装命令,自动下载并安装docker,构建镜像,启动容器集群(压缩包内注释覆盖范围达到80%) 大家可以看完教程亲自尝试下,也可以直接执行一键 ...