DEBUG的使用

(要在win32位习题下进行,win7 64位需要安装DosBox和debug这2个软件):

1:win64位下debug的使用教程:

下载debug.exe,这里我把debug放在了c盘根目录下

下载DosBox并安装好,

输入mount c c:\  加载目录到c盘

输入c:\  进入到c盘,看到我们已经在c盘下了。

输入debug,表示打开放在c盘下的debug工具,使用r命令,可以看到,我们进入了熟悉的debug环境。

2:debug的基本命令:

R  查看以及改变CPU寄存器的内容

例如 r ax 修改ax 的内容

D  查看内存中的内容

E 改写内存中的内容

U 将内存中的机器指令翻译成汇编指令

T 执行一条机器指令

A 以汇编指令的格式在内存中写入一条机器指令

quit 退出debug模式

3:实例讲解

1)将下面3条指令写入从2000:0开始的内存单元中,利用这2条指令计算2的8次方。

  mov ax,1

  add ax,ax

  jmp 2000:0003

(1): 说明2的8次方是256,也就是10000 0000(B)=256(十进制)=100(16进制),算到ax=0100时就是结果

注意:debug里面的数字都是16进制的

 

(2)然后修改cs的值为2000和ip的值为0

可见此时的cs=2000,ip=0

(3)使用t命令单步执行:

(4)注意:jmp 0003是跳转到2000:0003内存地址,然后在相加,然后在跳转,一直循环

最后的结果,现在里面的只看ax,cs,ip

2)查看内存的内容,PC机主板上的ROM中写的一个生产日期,在内存FFF00H~~FFFFFH的某几个单元中,请找到生成日期并试图改变它。

解析:FFF00H是20位,有段地址和偏移地址合成,FFF0段地址,0偏移地址,FFFFFH有FFF0段地址和FF偏移地址

先修改CS为fff0,IP地址值位0

查看内存的范围fff0:0 ff

最右边部分是ascii的值是10进制的,中间的是16进制的,通过ascii表可查,十进制30是对应的ascii值是0(30(H)-->48(十进制),48对应的ascii是0),以此类推可得

日期是92年1月1日。

下面尝试修改日期,e命令是改写内存的东西

但是日期并没有改变,因为是主板上的ROM是只读存储器,不能修改

3)向内存从B8100H开始的单元中填写数据

  e B810:0000 01 01 02 02 03 03 04 04

可以看到上面出现了小图标,这是因为B810是显存的地址,修改显存的地址改变在屏幕上显示。

最新文章

  1. Android开发学习之路-3DTouch效果模仿
  2. iOS仿直播带有气泡动画的UIButton
  3. SQL入门经典(二) 之数据库基本查询、添加、更新和删除
  4. js数据类型和关系运算语法
  5. Activity代码结构
  6. POJ 3186 Treats for the Cows 一个简单DP
  7. Spark Streaming 数据接收过程
  8. Spring-mvc junit单元测试中 如何回滚?
  9. 获取aplicationContext对象,从而获取任何注入的对象
  10. linux的Make使用的重定向
  11. python标准库]Hashlib
  12. 在SecureCRT中无需输入密码登录Linux主机
  13. 小程序getLocation出现的各种问题汇总
  14. PHP 数组转XML 格式
  15. Linux root用户下强制静音的问题
  16. (转) MVC身份验证及权限管理-2
  17. RTX——第8章 任务优先级修改
  18. “浪潮杯”山东省第五届ACM大学生程序设计竞赛(总结贴)
  19. CMWAP上网补丁描述文件!!支持ios9
  20. flex 的总结

热门文章

  1. CentOS7安装PHP简易步骤
  2. 数据库ORM框架GreenDao
  3. ITOO 第一个任务,新建界面
  4. 如何在MFC中添加对话栏
  5. session应用----登录验证小案例
  6. c语言二维数组传递
  7. Spring事务解析4-切面织入
  8. 黑客语(Leet)
  9. 【bzoj4513】储能表【数位DP】
  10. Hadoop YARN资源隔离技术