汇编指令之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的变换,在目标进程开启空间,然后把相关的指令机器 ...
随机推荐
- sourceTree3.2.6 跳过注册的方法(最新)
1.下载好之后会有这么一个界面要求你注册或登录.(不管它)将下面的一串串放进我的电脑的地址栏,打开sourcetree的文件夹 %LocalAppData%\Atlassian\SourceTree\ ...
- MySQL 部署分布式架构 MyCAT (一)
架构 环境 主机名 IP db1 192.168.31.205 db2 192.168.31.206 前期准备 开启防火墙,安装配置 mysql (db1,db2) firewall-cmd --pe ...
- mysql清空带外键的表
set FOREIGN_KEY_CHECKS =0;TRUNCATE memo;TRUNCATE customer;set FOREIGN_KEY_CHECKS =1;
- Requests 详解
什么是Requests Requests是用Python语言编写,基于urllib,他比urllib更加方便,可以节约我们的大量工作,完全满足HTTP测试需求
- 类数组(Array-like)对象应用
类数组(Array-like)对象 slice 方法可以用来将一个类数组(Array-like)对象/集合转换成一个新数组.你只需将该方法绑定到这个对象上. 一个函数中的 arguments 就是一 ...
- .gclient文件
//注意以.开头的文件名在linux下都是隐藏文件,需要使用ll 或者ls -all 才可以查看. .gclient文件必须有,否则会报类似下面的错误: Traceback (most recent ...
- 201871010116-祁英红《面向对象程序设计(java)》第四周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- LeetCode 回文串问题
5. Longest Palindromic Substring 647. Palindromic Substrings 解法一:从中心一点向两边扩展,需要考虑中心为一点,中心为两点. 解法二:马拉车 ...
- 【树状数组】2019徐州网络赛 query
(2)首先成倍数对的数量是nlogn级别的,考虑每一对[xL,xR](下标的位置,xL < xR)会对那些询问做出贡献,如果qL <= xL && qR >= xR, ...
- C++中的C
前言 因为C++是以C为基础的,所以要用C++编程就必须熟悉C的语法. C语言的学习可以学习K & R C的<C程序设计语言> 创建函数 Q: 函数原型? A: 标准C/C++有一 ...