简单介绍了,JMP指令按市面上的意思来说是跳转到指定地址,但我这里不这么说,JMP, CALL, RET三个指令均为修改EIP值的指令,EAX, ECX, EBX, EDX, ESP, EBP, ESI, EDI,这8个寄存器的值均可以用mov指令来修改里面的值,EIP行不行呢?我们实际测试一下。

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-09-06,20:23:27。
作者By-----溺心与沉浮----博客园

一、JMP指令

我们发现,指令违法,说明,EIP的值不允许通过MOV指令来修改, 但是可以通过什么办法来修改呢?就是我们的标题咯,就是这三条指令,到这里,相信你明白我为什么会说JMP, CALL, RET指令是用来修改EIP的值了吧,如果不明白,请接着看我下面的演示。

我们在0x4010000输入如下代码:

 JMP 0x401052

在0x401052处输入如下代码:

 JMP 0x401007

我们这两行代码输入进去,OD会自动帮我们转化成图中左边两个框中的代码,具体为什么要这样,我们这里先不做解释

JMP指令的作用就是无条件的修改EIP的值,我为什么不说是“跳转”,我们熟悉的词语呢?因为决定程序往哪跳转,这不是JMP做的,它所做的就是无条件去修改EIP的值,我们可以去理解成“MOV EIP, 0x00401052”, "MOV EIP, 0x401007", JMP将EIP的值修改完成过后,CPU会根据EIP里面的值决定程序往哪跳转,这件事是CPU决定的。我喜欢“庖丁解牛”,因为只有了解到了本质,我才觉得我是在学东西,就是push,pop,很多人也只是知道是压栈,出栈,知道了这个有什么用呢?只是知道怎么去用而已,万一如果出现

 MOV DWORD PTR DS:[ESP-],ESP
SUB ESP,

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-09-06,20:23:27。
作者By-----溺心与沉浮----博客园

我们还能做到认识push吗?我相信只有“庖丁解牛”,长期这样去认知高级指令,经过一定时间积累,我们看到变形的指令时,我们也能一眼认出它,

我们执行上面OD中写入的两行JMP指令,看看寄存器有哪些变化,为了方便观察,我这里已经将EAX, ECX, EDX, EBX, ESI, EDI的值分别修改成了0x1,0x2,0x3,0x4,0x5,0x6,ESP, EBP不要动!这两个代表这栈顶与栈底。

经过观察,我们发现只有EIP的值发生了改变,其他的寄存器并无发生变化,再执行第二条JMP指令

JMP指令执行完过后,可以发现它除了EIP寄存器外,它不影响任何寄存器的值,也不影响EFLAG的值

二、CALL指令

  CALL指令,首先将程序运行的下一地址压入堆栈,并修改EIP的值,我们看如下例子,首先我们将EAX, ECX, EDX, EBX, ESI, EDI的值分别修改成了0x1,0x2,0x3,0x4,0x5,0x6,ESP, EBP不要动!然后输入下面指令

 CALL 0040101C

执行CALL 0x40101C

CALL指令发生跳转的时候,下一行地址,也就是要回来的地址,并不是在它原有的基础上+4,而是看它旁边有几个字节

如果是第一个红框中所标,那就是2个字节,如果是第二个红框所标,那他就是5个字节,这里涉及到硬编码,大家就先知道是个什么回事就行

根据图中变化所示,我们可以清晰的看到,执行CALL 0x40101C指令时,0x401000下一行地址0x401005被压入栈中,ESP的值减4,原先ESP的值是0x0018FF8C,EIP的值也变成了0x0040101C

三、RET指令

  RET指令会将ESP的值POP出来,然后修改掉EIP的值

紧接上图,我们执行0x40101C处的RET指令,仔细观察ESP,EIP的值,并观察ESP所代表的的内存编号的值得变化

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-09-06,20:23:27。
作者By-----溺心与沉浮----博客园

汇编指令之JMP,CALL,RET(修改EIP的值!!!)的更多相关文章

  1. 常见寄存器以及常见汇编指令,常见爆破指令 good

    CPU的任务就是执行存放在存储器里的指令序列.为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O之间的数据传送任务.早期的CPU芯片只包括运算器和控制器两大部分.到了近几年,为了使存储器 ...

  2. JMP CALL RET

    一.JMP指令(修改EIP的值)(第一个修改EIP的指令) 三种方法 :JMP 立即数 JMP  寄存器 JMP  内存 EIP 之前介绍过,EIP存放的值就是cpu下一次要执行的地址 1.之前学过要 ...

  3. 王爽汇编第十章,call和ret指令

    目录 王爽汇编第十章,call和ret指令 call和ret指令概述: ret和retf ret指令 retf指令 call 和 ret 的配合使用 call指令详解 call原理 call指令所有写 ...

  4. Cheat Engine 修改汇编指令

    打开游戏 扫描阳光 扫描过程就不讲了 找到阳光的地址 显示反汇编 找到使阳光减少的反汇编代码 空指令替换 将阳光减少汇编指令,用空指令替换.这样阳光就不再减少了 指令替换 也可以将汇编指令修改,减少变 ...

  5. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

  6. go语言调度器源代码情景分析之五:汇编指令

    本文是<go调度器源代码情景分析>系列 第一章 预备知识的第4小节. 汇编语言是每位后端程序员都应该掌握的一门语言,因为学会了汇编语言,不管是对我们调试程序还是研究与理解计算机底层的一些运 ...

  7. 通过修改EIP寄存器实现远程注入

    功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝 ...

  8. 通过修改EIP寄存器实现32位程序的DLL注入

    功能:通过修改EIP寄存器实现32位程序的DLL注入 <如果是64位 记得自己对应修改汇编代码部分> 原理:挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...

  9. 通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里

    /* 描述 功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...

随机推荐

  1. sourceTree3.2.6 跳过注册的方法(最新)

    1.下载好之后会有这么一个界面要求你注册或登录.(不管它)将下面的一串串放进我的电脑的地址栏,打开sourcetree的文件夹 %LocalAppData%\Atlassian\SourceTree\ ...

  2. MySQL 部署分布式架构 MyCAT (一)

    架构 环境 主机名 IP db1 192.168.31.205 db2 192.168.31.206 前期准备 开启防火墙,安装配置 mysql (db1,db2) firewall-cmd --pe ...

  3. mysql清空带外键的表

    set FOREIGN_KEY_CHECKS =0;TRUNCATE memo;TRUNCATE customer;set FOREIGN_KEY_CHECKS =1;

  4. Requests 详解

    什么是Requests Requests是用Python语言编写,基于urllib,他比urllib更加方便,可以节约我们的大量工作,完全满足HTTP测试需求

  5. 类数组(Array-like)对象应用

    类数组(Array-like)对象 slice 方法可以用来将一个类数组(Array-like)对象/集合转换成一个新数组.你只需将该方法绑定到这个对象上. 一个函数中的  arguments 就是一 ...

  6. .gclient文件

    //注意以.开头的文件名在linux下都是隐藏文件,需要使用ll 或者ls -all 才可以查看. .gclient文件必须有,否则会报类似下面的错误: Traceback (most recent ...

  7. 201871010116-祁英红《面向对象程序设计(java)》第四周学习总结

    博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...

  8. LeetCode 回文串问题

    5. Longest Palindromic Substring 647. Palindromic Substrings 解法一:从中心一点向两边扩展,需要考虑中心为一点,中心为两点. 解法二:马拉车 ...

  9. 【树状数组】2019徐州网络赛 query

    (2)首先成倍数对的数量是nlogn级别的,考虑每一对[xL,xR](下标的位置,xL < xR)会对那些询问做出贡献,如果qL <= xL && qR >= xR, ...

  10. C++中的C

    前言 因为C++是以C为基础的,所以要用C++编程就必须熟悉C的语法. C语言的学习可以学习K & R C的<C程序设计语言> 创建函数 Q: 函数原型? A: 标准C/C++有一 ...