C/C++ 您当前所在位置:首页 > C/C++ > 常用汇编指令(三)

常用汇编指令(三)

陈成 陈成 2020-07-05 16:31:27 C/C++ 177人已围观

简介 在目前流行的编程语言下,还有更底层的语言,那就是汇编语言,当然还有更底层的机器语言。汇编语言由一条条指令组成,在分析软件的时候会经常和汇编打交道,所以掌握汇编指令是必须的,介绍几个常用汇编指令。

push指令

push指令是将数据压入堆栈中,并且还能将ESP的值减4。这里也不一定是减4,加多少要看你压入的数据宽度是多少,我们来试验一下。

首先我们看能不能压入一个8位的数据。

push al

入栈.png

我们可以看到报错,说明我们不能压入8位数据到堆栈中。

再试试16位。

push ax

入栈.png

可以看到push可以压入16位的数据。执行push ax后ESP的值减了2,说明并不是所有入栈ESP都是减4,这里就不截图了。

再验证一下能不能push32位数据

入栈.png

没有问题,执行后ESP的值减了4。

32位的内存和16位的内存也是一样

入栈.png

执行后ESP分别减4和减2,和寄存器一样不能操作8位的。

最后我们还可以push一个立即数,push的立即数不管多大或多小ESP都是减4。

pop指令

pop指令和push相反,push是将数据入栈,而pop就是将数据从栈中取出放到16位的寄存器或内存,或32位的寄存器或内存,并且ESP会加4或加2,加多少取决于pop后面窗口的宽度,如果pop后面是一个32位寄存器或内存,则ESP加4,pop后面是一个16位的寄存器或内存,则ESP加2。比较简单,就不截图了。

pushad指令

pushad指令很有用,它可以将8个32位寄存器一次保存到堆栈中。

pushad.png

为了很好的感受发生的变化,我将寄存器的值改成好认的值,执行pushad前我们看到的是现在的样子,注意ESP的值。

执行命令,看结果

pushad.png

可以看到寄存全部入了堆栈。

popad指令

本指令和pushad指令相反,将堆栈中的寄存器的值又恢复到寄存器中。

popad.png

文章评论

发送

站点信息

  • 上线时间:2020年05月30日
  • 网站程序:自建框架
  • 博客模板:今夕何夕
  • 文章统计43篇文章
  • 评论统计0条评论
  • 留言统计0条留言
  • 统计数据:百度统计