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. 并不对劲的复健训练-bzoj5253:loj2479:p4384:[2018多省联考]制胡窜

    题目大意 给出一个字符串\(S\),长度为\(n\)(\(n\leq 10^5\)),\(S[l:r]\)表示\(S_l,S_{l+1}...,S_r\)这个子串.有\(m\)(\(m\leq 3\t ...

  2. 并不对劲的bzoj4231: 回忆树

    题目大意 \(n\)个点的树,每条边上有一个小写字母. 操作:给定2个点\(u\),\(v\)(\(u\)可能等于\(v\))和一个非空字符串\(s\),问从\(u\)到\(v\)的简单路径上的所有边 ...

  3. c# mvc权限系统

    登陆界面可以用index1,现在这个是仿照这个写的 登陆后的界面.模板都是套的,数据那个easyui自己写的 后台直接三层架构,dapper连处理数据后面加了autofac demo地址:https: ...

  4. scrapy操作指南

    Scrapy安装:(scrapy依赖包过多推荐使用下面的方法) 先安装Anaconda,然后 运行conda install Scrapy 创建scrapy项目: 1,scrapy startproj ...

  5. form表单相关

    <input> 元素 <input> 元素是最重要的表单元素. <input> 元素有很多形态,根据不同的 type 属性. 这是本章中使用的类型: 类型 描述 t ...

  6. 巧用Map缓存提升"翻译"速度

    在业务编码中,很多情况都需要用到code2Name或者id2Name之间的"翻译",在我的过往经历中发现不少开发人员都是直接双重循环实现这种"翻译".如果一次& ...

  7. Asp.Net Server.MapPath()用法

    做了一个上传文件的功能 本地测试没问题 部署到服务器之后 一直报错 由于 某些历史原因 看不到错误信息 最后发现是路径的问题 其实这么简单的问题 最早该想到的 ...... Server.MapPat ...

  8. Java学习笔记【十一、序列化】

    序列化的条件 实现Serializable接口 所有属性必须是可序列化的,或标记为transient(不做序列化) 序列化-将对象输出为序列化文件 ObjectOutputStream 反序列化-将序 ...

  9. odoo标识符

    class Book(models.Model): _name = "library.book" _description = "Book" _order = ...

  10. centos 7 安装 Git-2.23.0

    Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容. Git 易于学习,占地面积小,具有闪电般的快速性能. 它具有诸如Subversion,CVS,Perforc ...