汇编指令之JMP,CALL,RET(修改EIP的值!!!)
简单介绍了,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的值!!!)的更多相关文章
- 常见寄存器以及常见汇编指令,常见爆破指令 good
CPU的任务就是执行存放在存储器里的指令序列.为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O之间的数据传送任务.早期的CPU芯片只包括运算器和控制器两大部分.到了近几年,为了使存储器 ...
- JMP CALL RET
一.JMP指令(修改EIP的值)(第一个修改EIP的指令) 三种方法 :JMP 立即数 JMP 寄存器 JMP 内存 EIP 之前介绍过,EIP存放的值就是cpu下一次要执行的地址 1.之前学过要 ...
- 王爽汇编第十章,call和ret指令
目录 王爽汇编第十章,call和ret指令 call和ret指令概述: ret和retf ret指令 retf指令 call 和 ret 的配合使用 call指令详解 call原理 call指令所有写 ...
- Cheat Engine 修改汇编指令
打开游戏 扫描阳光 扫描过程就不讲了 找到阳光的地址 显示反汇编 找到使阳光减少的反汇编代码 空指令替换 将阳光减少汇编指令,用空指令替换.这样阳光就不再减少了 指令替换 也可以将汇编指令修改,减少变 ...
- 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码
浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...
- go语言调度器源代码情景分析之五:汇编指令
本文是<go调度器源代码情景分析>系列 第一章 预备知识的第4小节. 汇编语言是每位后端程序员都应该掌握的一门语言,因为学会了汇编语言,不管是对我们调试程序还是研究与理解计算机底层的一些运 ...
- 通过修改EIP寄存器实现远程注入
功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝 ...
- 通过修改EIP寄存器实现32位程序的DLL注入
功能:通过修改EIP寄存器实现32位程序的DLL注入 <如果是64位 记得自己对应修改汇编代码部分> 原理:挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...
- 通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里
/* 描述 功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...
随机推荐
- [PHP] time_wait与长连接短连接
服务端上查看tcp连接的建立情况,直接使用netstat命令来统计,看到了很多的time_wait状态的连接.这些状态是tcp连接中主动关闭的一方会出现的状态.该服务器是nginx的webserver ...
- Shell命令-用户用户组管理之id、su
文件及内容处理 - id.su 1. id:查看用户的uid,gid及归属的用户组 id命令的功能说明 id 命令用于显示用户的 ID,以及所属群组的 ID.id 会显示用户以及所属群组的实际与有效I ...
- JAVA框架中XML文件
其实在JAVA开发中servlet配置,映射注入配置等等都可以用xml来配置 在此处的department是实体类的名字,而不是对应的数据库表的名字 数据库表的字段名=#{实体类属性名} 逆向工程生成 ...
- CountDownLatch/CyclicBarrier/Semaphore 使用过吗?
CountDownLatch/CyclicBarrier/Semaphore 使用过吗?下面详细介绍用法: 一,(等待多线程完成的)CountDownLatch 背景; countDownLatch ...
- Python学习笔记2基本语法规则_20170611
# 1.print 显示示例 print('Hello, World!') 逗号分割变量,输出插入空格 name = 'BB' print('AA', name) # output: >> ...
- Deformable Convolutional Networks
1 空洞卷积 1.1 理解空洞卷积 在图像分割领域,图像输入到CNN(典型的网络比如FCN)中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预 ...
- 快速获取 IP 地址
IP 地址可以分为两类,公用和私有(专用).公用 IP 是唯一的 IP 地址,可以从 Internet 访问.专用 IP 地址保留供您专用网络内部使用,而不会直接暴露给 Internet. 本文将介绍 ...
- go 接收发送文件
package main import ( "fmt" "os" "net" "io" ) //发送文件内容 func ...
- Linux应试技巧
前言:此文是为了CSP-S第二轮认证所用系统NOI-Linux的写的,但其他的Linux系统也可以按照相同或类似的方法进行配置. 配置NOI-Linux 我大约是一个月以前由于比赛的原因才开始接触NO ...
- 使用JaCoCo统计单元测试代码覆盖率
1 JaCoCo介绍 JaCoCo是EclEmma团队基于多年覆盖率库使用经验总结而研发的一个开源的Java代码覆盖率库. 2 JaCoCo覆盖率计数器 JaCoCo 包含了多种尺度的覆盖率计数器(C ...