免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
工具下载:
链接: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