深入理解黑客攻击-改变程序的返回地址
来源:互联网 发布:淘宝怎么取消开店认证 编辑:程序博客网 时间:2024/05/19 05:30
给出c代码
void foo()
{
inta,*p;
p=(int*)((int)&a+8);
*p+=12;
}
int main()
{
foo();
printf("Print1\n");
printf("Print2\n");
printf("Print3\n");
printf("Print4\n");
return0;
}
代码的意图就是通过调用foo函数,使得不输出Print1只输出Print2 Print3 Print4
也就是通过调用foo函数将函数的返回地址修改为printf("Print2\n")这条指令的地址处
在linux系统上,通过gcc foo.c m.c
得到的是可执行文件a.out
通过对可执行文件a.out进行反汇编
objdump -d a.out
如图所示
观察foo函数的反汇编代码
通过观察反汇编的main函数部分
我们知道,指针p是处于栈指针 esp-8的位置的
而栈指针esp+4的位置是foo函数的返回地址
所以指针p需要加上12才能回到foo的返回地址上去
我们为了不输出Print1
要使返回地址加上12
也就是Printf2的地址
所以输出为这里没有输出Print1
通过修改返回地址的值,来达到调用我们想调用的指令的目的
0 0
- 深入理解黑客攻击-改变程序的返回地址
- 深入理解黑客攻击-sql注入攻击
- 深入理解黑客攻击-缓冲区溢出攻击
- 程序返回地址的理解
- 深入理解黑客攻击-直接修改可执行文件
- 深入理解黑客攻击-键盘记录器
- 函数返回地址深入理解内存段
- 黑客知识:注入程序带来的攻击及防范
- 防范缓冲区溢出攻击的方法--备份返回地址
- 深入理解程序的结构
- 这样的黑客攻击不值
- 黑客攻击的一般流程
- 了解黑客攻击的流程
- 黑客的一些攻击方法
- 5次史上最牛的黑客攻击
- 史上最牛的五次黑客攻击
- 史上最牛的五次黑客攻击
- 黑客攻击的一般流程
- c语言关键字const
- CodeForces 596E
- windows下文件路径太深,无法删除解决办法
- asterisk目录结构
- 循环删除数组中的元素
- 深入理解黑客攻击-改变程序的返回地址
- iOS - 解决the behavior of the UICollectionViewFlowLayout is not defined
- 关于使用BufferedWriter时没有数据 写入问题,和换行问题
- 自定义一个ListView实现聊天界面
- apk打包签名
- 【poj】【费用限制最短路】ROADs
- HDU 1247 trie树 + 暴力查询
- android developer tiny share-20161028
- android customalized [i]