push 0x******* retn 的应用
来源:互联网 发布:淘宝购物优惠微信群 编辑:程序博客网 时间:2024/05/01 18:17
转自 http://blog.sina.com.cn/s/blog_679b38460100xhbj.html
在破解的时候,我想在一个call的头部直接返回,如何判断到底是使用retn、retn 4还是retn 0C......
是看call头部的代码吗??
我知道的只是retn xx的结果是在ESP上+xx,可似乎有时候我都用retn也没什么关系,这是为什么?
是看call头部的代码吗??
我知道的只是retn xx的结果是在ESP上+xx,可似乎有时候我都用retn也没什么关系,这是为什么?
UD]Arthas
2008-04-19, 16:24:43
使用retn,
因为你说的是在call的头部返回,也就是被调用过程的第一条指令处返回(我没有曲解你的意思吧)。
这是还没有分配局部变量,也没有往堆栈中压入数值,那么esp指令指向的依然是call指令的返回地址,所以你直接返回就可以了,使用retn
xxxxxxx1 call xxxxxx10
xxxxxxx5
当执行call指令时,系统会把xxxxxxx5作为返回地址压入堆栈
而在被调用过程完成它的工作后,retn指令就是读取堆栈顶部的地址,然后返回到哪里
所以,通常情况下,在被调用过程里,分配了多少局部变量,也就是形如
add esp -xx
或着
sub esp xx
这就是在分配局部变量
最后过程最后也会释放多少
但是有时程序故意要修改返回地址让程序返回到另一个地方,最简单的就是这样
push xxxxxx20
retn
这样由于修改了堆栈数据,retn指令是只管读出堆栈顶部的值作为返回地址,我们就返回
到了xxxxxx20的地方了。
如果你要在被调用过程的中间,只是返回到原来的返回地址,那么你注意好堆栈平衡就可以了。
因为你说的是在call的头部返回,也就是被调用过程的第一条指令处返回(我没有曲解你的意思吧)。
这是还没有分配局部变量,也没有往堆栈中压入数值,那么esp指令指向的依然是call指令的返回地址,所以你直接返回就可以了,使用retn
xxxxxxx1 call xxxxxx10
xxxxxxx5
当执行call指令时,系统会把xxxxxxx5作为返回地址压入堆栈
而在被调用过程完成它的工作后,retn指令就是读取堆栈顶部的地址,然后返回到哪里
所以,通常情况下,在被调用过程里,分配了多少局部变量,也就是形如
add esp -xx
或着
sub esp xx
这就是在分配局部变量
最后过程最后也会释放多少
但是有时程序故意要修改返回地址让程序返回到另一个地方,最简单的就是这样
push xxxxxx20
retn
这样由于修改了堆栈数据,retn指令是只管读出堆栈顶部的值作为返回地址,我们就返回
到了xxxxxx20的地方了。
如果你要在被调用过程的中间,只是返回到原来的返回地址,那么你注意好堆栈平衡就可以了。
阅读全文
0 0
- push 0x******* retn 的应用
- hook api (push xxxx/retn)
- 反汇编RETN 0x0c的理解
- retn
- retn之后的EIP欺骗的Ollydbg!
- 反汇编的call和retn
- 反汇编的call和retn
- 对call、retn的深入分析和认识
- OD加载程序在retn停下的问题
- 汇编中retn 4的含义详析
- pull、push模式的Report应用
- 水晶报表push模式的应用
- iOS iOS应用PUSH功能的实现
- [Push]百度消息推送的应用
- iPhone X在push时tabBar往上偏移的问题
- 在MIDP2.0中使用Push注册机制,允许应用被自动启动的方法
- PUSH技术——介绍了push的形式和应用
- 为 iPhone 应用搭建 php 版 push 服务器的流程
- NYOJ 45 棋盘覆盖 (大数问题)
- 二进制位运算应用
- 爬动的蠕虫
- Android进阶二:序列化总结(基础篇)
- 快速排序
- push 0x******* retn 的应用
- oracle数据增删改
- 深入理解PHP:高级技巧、面向对象与核心技术(原书第3版) -- 设计模式之组合模式
- LeetCode 90. Subsets II
- hdu6213 Chinese Zodiac
- c++基础之读取数据
- 输入、输出阻抗以及阻抗匹配
- px, dp, dip, sp之间的区别
- Step by Step——数据库-基础补漏