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

常用汇编指令(四)

陈成 陈成 2020-07-07 12:40:34 C/C++ 154人已围观

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

jmp指令

jmp指令就一句话,无条件修改EIP的值。

call指令

call指令和jmp指令有一个相同点,就是都可以将EIP的值修改。不同的是call指令除了修改EIP外还做了一件事,它将当前行的下一行地址压入堆栈,下一行地址称为返回地址。为什么要将下一行地址压入堆栈呢,因为当call执行完后要返回到它的下一行继续执行。

ret指令

ret指令就相当于pop eip,当call执行完后最后会有一个ret,就是把call指令压入堆栈的那个返回地址重新放回EIP上,让CPU回去继续执行。

cmp指令

cmp指令目标操作数可以是内存或寄存器,源操作数可以是内存或寄存器或立即数,但不能两边都是内存。8位、16位、32位都可以比较,但宽度要一样。

cmp指令和sub指令有些像,sub指令目标操作数减去源操作数再把结果放在目标操作数里,并且还会改变标志寄存器,但cmp指令不会改变目标操作数,只是会改变标志寄存器。

cmp用来判断两个数大小,如果两个数一样大,则只会改变ZF位。如果一个大一个小,则我们可以看SF位。

test指令

test指令目标操作数可以是内存或寄存器,源操作数可以是内存或寄存器或立即数,但不能两边都是内存。8位、16位、32位都可以比较,但宽度要一样。

test指令对两个数值进行与操作,结果也是不保存的,但会改变相应的标志位。我们经常看到test eax,eax这样的指令,它就是判断eax是否为0,因为自己和自己进行与运算,只要自己不是0,那么结果肯定也不是0。

文章评论

发送

站点信息

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