15.x86游戏实战-汇编指令jmp call ret

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3 复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:14.x86游戏实战-汇编指令cmp test

jmp无条件跳转

call无条件跳转,call与jmp的区别,jmp只仅仅跳转,call跳转之前会把它下一句代码的地址放到栈里。

ret在执行ret时,ret会把栈里第一个数据当做内存地址,并且会跳转到这个内存地址

上方提到了栈,栈就是一块内存空间,只是这个内存空间使用的时候有些特殊,看下方截图

jmp

执行 jmp 0x751D67F5

执行之后,会跳到0x751D67F5这个位置,什么寄存器都没改,下图看到eip的值是红的,这不是改了吗?eip它的值表示的是下一次该执行的代码的地址,如下图eip的值是0x751D67F5,这说明下一次就要执行0x751D67F5位置的代码了,也就是call 0x751D67FE这个代码,eip的值只要执行了代码都会发生改变,所以它不算是被修改

call

执行call 0x751D6811,在执行之前,可以看到它的下一句代码的地址是0x751D680D

这里执行时要注意点单步步入,不要点单步步过

执行之后,它把下一行代码的地址放到了栈里,并且发生了跳转,如下图

ret

执行ret之前

执行之后,把栈里第一个数据当做代码地址跳转了过去,并且把栈里第一个数据进行了删除(改变了栈第一个数据是谁)

所以call一般与ret一起使用,只要有call就肯定有ret


img

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 21:50:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 21:50:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 21:50:03       45 阅读
  4. Python语言-面向对象

    2024-07-10 21:50:03       55 阅读

热门阅读

  1. 【对抗算法复现】CW

    2024-07-10 21:50:03       15 阅读
  2. vscode无法切换env环境

    2024-07-10 21:50:03       23 阅读
  3. GCN-LSTM实现时空预测

    2024-07-10 21:50:03       19 阅读
  4. 泛型

    泛型

    2024-07-10 21:50:03      20 阅读
  5. 二分查找(红绿标记法)

    2024-07-10 21:50:03       20 阅读
  6. uniapp开发踩过的坑合集( 持续更新 )

    2024-07-10 21:50:03       16 阅读
  7. 算法之工程化内容(1)—— Linux常用命令

    2024-07-10 21:50:03       20 阅读