手把手教你汇编 Debug(二)

简介: 关于汇编的第一篇文章:爱了爱了,这篇寄存器讲的有点意思上篇文章了解了一下基本的寄存器,这篇文章我们来进行实际操作一下。我们以后将会用到很多 Debug 命令,这里我们先来熟悉一下它们

Debug -e

上面说的都是查看内存中指定位置或者区域的值,下面我们要来改写一下内存值。

使用 -e 可以改写内存值,比如我们想要改写 1000:0 ~ 1000:f 中的内容,可以使用 -e 1000:0 0 1 2 3 4 5 6 7 8 9 0 a b c d e f 这种方式,如下图所示。

微信图片_20220417161046.jpg

这里需要注意下,在进行 -e 改写的时候,每个值中间都有一个空格,如果没有空格的话,会当做一个内存值来看待。

然后用 -d 1000:0 看到我们刚改写的内存值。

还可以使用提问的方式来逐个修改从某一地址开始的内存单元的内容。

还是用 1000:100 来举例子,输出 -e 1000:100 后按下回车键。

微信图片_20220417161050.jpg

如上图所示,可以看到我们先输入了一次 -e 1000:100 这个指令,然后按下了回车键。

注意,如果这里你按下了回车键,就相当于整个 -e 改写的过程已经完成。

如果你想要继续改写后面内存中的值,你需要按下空格键。

我们改写了 1000:100 之后的内存值,然后使用 -d 1000:100 查看我们改写的内容是否生效。

-e 命令还可以支持写入字符,比如我们可以向 1000:0 这个位置开始写入数值和字符,-e 1000:0 1 'a' 2 'b' e 'c' 。

微信图片_20220417161053.jpg

如上图所示,当我们向内存写入字符 'a' 'b' 'c' 的时候,会自动转换为 ASCII 码进行存储,在最右侧可以找到刚刚写入的字符。

Debug -u

如何向内存中写入一段机器码呢?比如我们想要在内存中写入一段机器码。

微信图片_20220417161056.jpg

我们可以使用 -e 来进行写入,向内存中写入 b8 01 00 b9 02 00 01 c8 这个机器码,如下所示

微信图片_20220417161059.jpg

我们使用 -e 写入之后,使用 -d 查看内存值,可以发现我们刚刚写入的值,但是却看不到机器码,所以机器码该如何看呢?

别急,还有个 -u 命令,这个就是看机器码的,如下图所示,我们使用 -u 命令显示我们写入的机器码。

微信图片_20220417161102.jpg

可以看到 1000:0000 ~ 1000:0006 这个内存地址使我们写入的机器码,-u 这个命令就是将内存单元的内容翻译为汇编指令并显示。

-u 输出的结果分为三部分显示:

  • 最左侧是每一条机器指令的地址;
  • 中间是机器指令;
  • 最右侧是机器指令执行的汇编指令。

1000:0 处存放的是写入的机器码 B8 01 00 组成的机器指令,对应的汇编指令是 MOV AX,0001。

1000:0003 处存放的是写入的机器码 B9 02 00 组成的机器指令,对应的汇编指令是 MOV CX,0002。

1000:0006 处存放的是写入的机器码 C1 C8 所组成的机器指令,对应的汇编指令是 add ax,cx。

Debug -t

上面介绍的一系列指令包括我们上面提到的 Debug -e 机器码都是向内存中进行写入,那么如何执行这些指令呢?

我们可以使用 Debug -t 来执行写入的指令。使用 Debug -t 可以执行由 CS:IP 指向的指令。

既然是 -t 能够执行从 CS:IP 指向的命令,所以我们有必要将 CS:IP 指向 1000:0(因为我们前面将指令写在了 1000:0 处)。

首先我们需要执行 -r cs 1000 ,-r ip 0 把 CS:IP 赋值为 1000:0。

然后执行 -t 指令,下图是已经执行过的指令截图。

微信图片_20220417161106.jpg

可以看到,执行完 -t 指令之后,MOV AX,0001 这条指令被执行,当前 AX 寄存器的内容变为了 0001,这条汇编指令的意思就是把 0001 移动到 AX 寄存器中。

继续执行 -t 之后,我们可以看到寄存器的变化。

微信图片_20220417161109.jpg

Debug -a

毕竟机器指令不是那么好懂,写入很不方便,所以有没有办法能够支持我们直接写入汇编指令呢?还真有,Debug 提供了 -a 这种方式来实现汇编指令的写入。如下图所示

微信图片_20220417161113.jpg

可以看到,我们使用了 -a 命令来对 1000:0 进行写入,分别输入 mov ax,1 mov bx,2 mov cx,3 add ax,bx add ax,cx add ax,ax 指令,然后按回车进行确定执行。

我们使用 -d 1000:0 f 可以看到从偏移地址 0 处开始的第 f 个内存指令(因为最大写入的地址只是 f)。

微信图片_20220417161117.jpg

上图中的 1000:000F 为什么有值呢,因为我们上面已经执行过这个写入了。

另外,使用 -a 可以从一个预设的地址处开始输入指令。

总结


今天和大家聊了一下 Debug 的基本用法,主要包括

  • -r 查看、修改寄存器中的内容
  • -d 查看内存中的指令
  • -e 修改内存中的内容
  • -u 可以将内存中的内容解释为机器指令和对应的汇编指令
  • -t 执行 CS:IP 处的指令
  • -a 以汇编得形式向内存写入内容

汇编指令的选项有很多,上面介绍的这些属于经常用到的指令,这些指令要能够熟练使用。

相关文章
|
C语言 C++
汇编的初体验+debug加法分析【微机原理】
汇编的初体验+debug加法分析【微机原理】
120 1
|
存储
汇编实验一 DEBUG调试工具的使用
一、实验目的 1.学习使用DEBUG程序的各种命令。 2.了解计算机取指令、执行指令的工作过程。 3.掌握用DEBUG调试工具自编程序的方法。
393 0
汇编实验一 DEBUG调试工具的使用
|
数据安全/隐私保护 Windows
手把手教你汇编 Debug(一)
关于汇编的第一篇文章: 爱了爱了,这篇寄存器讲的有点意思 上篇文章了解了一下基本的寄存器,这篇文章我们来进行实际操作一下。 我们以后将会用到很多 Debug 命令,这里我们先来熟悉一下它们
手把手教你汇编 Debug(一)
汇编(三)段地址、偏移地址、内存单元、寄存器、CS、IP、代码段、debug、实验题
段地址、偏移地址、内存单元、寄存器、CS、IP、代码段、debug、实验题、汇编、汇编编程、win10怎么使用debug
10767 2
汇编(七)[bx]、 loop指令、debug与masm
汇编、[bx]、 loop指令、debug与masm、汇编程序
4460 0
汇编实验1:环境搭建与Debug使用
1 实验目的 学会搭建汇编语言程序设计的软件平台 学会Debug实用程序的基本功能 对汇编指令、寄存器、内存空间产生直观的认识 2 实验内容 任务0-搭建汇编语言实验环境   参考视频“0105 汇编语言实践环境搭建”,搭建汇编语言实验环境,以便于下面的工作。   如果使用的winXP,可以不安装DOSBOX模拟器,而是用XP的MS-DOS方式运行masm文件夹中
1528 0
|
7月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
273 2
|
2月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
2月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
221 0