前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程

汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程

作者头像
今天是几号
发布2024-07-18 15:55:02
490
发布2024-07-18 15:55:02
举报
文章被收录于专栏:Cyber Security

实验环境安装:

Debug DOSBox MASM6 百度云链接

预备知识

什么是Debug?

Debug是DOS、Winodws都提供的实模式(8086 方式)程序的调试工具。使用它可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行

使用到的Debug功能

R命令查看、改变CPU寄存器的内容 D命令查看内存中的内容(机器指令形式) E命令改写内存中的内容——即提供指令(使用机器指令),用得比较少,多为A命令 U命令查看内存中的内容(将机器指令形式转换为汇编指令的形式) T命令执行一条汇编(机器)指令(就是执行当前指令缓冲器中的·指令) A命令相比较E,使用汇编指令进行内存修改——向内存提供机器指令 P命令在遇到汇编指令为int xx 时,使用p指令结束(否则CPU会指向一个未知的地址段)

debug存放目录

-r 查看、改变CPU寄存器的内容

-r 查看CPU寄存器

此时CS=073F,IP=0000,即内存073F:0000处的指令为CPU当前要读取、执行的指令。

Debug 还列出了CS : IP 所指向的内存单元处所存放的机器码,并将它翻译为汇编指令。

可以看到, CS:IP 所指向的内存单元为073F:0000, 此处存放的机器码为00 00, 对应的汇编指令为[BX+SI],AL

-r 修改寄存器AX中的内容
-r 修改CS和IP中的内容

CS:IP指向FFFF:1234,此处存放的机器码为38886504 对应的汇编指令是[BX+SI+0465],CL

-d 命令查看内存中的内容

-d 查看内存中的内容

-d内存0000H 处的内容,可以用" d 段地址:偏移地址”的格式来查看

用D 命令查看内存0000 : 0 处的内容

使用" d 段地址:偏移地址”的格式, Debug 将列出从指定内存单元开始的128 个内存单元的内容。在使用d 0000:0 后, Debug 列出了0000:0~ 0000:7F 中的内容。

中间是从指定地址开始的128个内存单元的内容,用十六进制的格式输出,每行的输出从16 的整数倍的地址开始,最多输出16 个单元的内容 内存0000:0 单元中的内容是60H, 内存0000:1单元中的内容是10H, 内存0000:0~0000:F中的内容都在第一行;内存1000: 10~ 1000: IF 中的内容都在第二行。注意在每行的中间有一个"-"'它将每行的输出分为两部分,这样便于查看 左边是每行的起始地址。 右边是每个内存单元中的数据对应的可显示的ASCII 码字符。比如,内存单元0000:1e、0000:28、0000:4C中存放的数据是70H 、55H 、40H, 它对应的ASCII 字符分别是"p" 、"U" 、"e" ; 内存单元0000:0中的数据是00H, 它没有对应可显示的ASCll字符, Debug 就用"."来代替。 在使用" d 段地址:偏移地址”之后,接着使用D 命令,可列出后续的内容

-d命令的查看范围

此时采用" d 段地址:起始偏移地址结尾偏移地址”的格式。比如要看0000:0-0000:9 中的内容,可以用"d 0000:0 9" 实现

如果我们就想查看内存单元1000H 中的内容,可以用图2. 39 中的任何一种方法看到,因为图中的所有“段地址偏移地址”都表示了10000H 这一物理地址。

用3 种不同的段地址和偏移地址查看同—个物理地址中的内容

-e命令改写内存中的内容

-e 命令改写内存中的内容

可以使用E 命令来改写内存中的内容,比如,要将内存1000:0~ 1000:9 单元中的内容分别写为0 、1 、2 、3 、4 、5 、6 、7 、8 、9, 可以用"e 起始地址 数据 数据 数据 ……"的格式来进行

也可以采用提问的方式来一个一个地改写内存中的内容

-e 命令向内存中写入字符

Debug 对E 命令的执行结果是,向1000:0 、1000:2 、1000:4 单元中写入数值1 、2 、3' 向1000 : 1 、1000:3 、1000 : 5 单元中写入字符" a" 、"b" 、" C" 的ASCII 码值: 61H 、62H 、63H 。

-e 命令将机器码写入内存

比如我们要从内存1000:0 单元开始写入这样一段机器码:

机器码 对应的汇编指令

b80100 mov ax , 0001b90200 mov cx , 000201c8 add ax, cx

-u命令查看内存中的内容

-u命令将内存单元中的内容翻译为汇编指令显示

使用U 命令。比如可以用U 命令将从1000 : 0 开始的内存单元中的内容翻译为汇编指令,并显示出来

-t命令可以执行一条或多条指令

简单地使用T 命令,可以执行CS :IP 指向的指令

-a命令以汇编指令的形式在内存中写入机器指令

用A 命令向从1000:0 开始的内存单元中写入指令

首先用A 命令,以汇编语言向从1000:0 开始的内存单元中写入了几条指令,然后用D 命令查看A 命令的执行结果。可以看到,在使用A 命令写入指令时,我们输入的是汇编指令, Debug 将这些汇编指令翻译为对应的机器指令,将它们的机器码写入内存。

实验任务

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

mov ax,1 add ax,ax jmp 2000:0003

修改CS:IP——CPU当前要读取指令的地址

-t 执行当前CS:IP处指令 并且观察CS:IP变化

  1. PC主板上的ROM中有个一出产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个出产日期并试图改变它。

地址在FFFF0=FFFF*16+0; FFFFF=FFFF*16+F

用debug如下:

-d ffff:0 f FFFF:0000 EA 5B E0 00 F0 (date here...)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验环境安装:
  • 预备知识
    • 什么是Debug?
      • 使用到的Debug功能
        • -r 查看、改变CPU寄存器的内容
          • -r 查看CPU寄存器
          • -r 修改寄存器AX中的内容
          • -r 修改CS和IP中的内容
        • -d 命令查看内存中的内容
          • -d 查看内存中的内容
          • -d命令的查看范围
        • -e命令改写内存中的内容
          • -e 命令改写内存中的内容
          • -e 命令向内存中写入字符
          • -e 命令将机器码写入内存
        • -u命令查看内存中的内容
          • -u命令将内存单元中的内容翻译为汇编指令显示
        • -t命令可以执行一条或多条指令
          • -a命令以汇编指令的形式在内存中写入机器指令
          • 实验任务
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档