栈帧
2016-06-11 13:34
429 查看
如图所示,下面是高地址,上面是低地址,main函数中调用fun1的时候,压入了实参a,b,这个实参a,b与main函数中的数据a,b是不样的,实参a,b是一份拷贝,在fun1函数
中,定义了指针p,p指向a的地址,这里a的地址是实参a的地址,p--指向main函数下一条命令的地址,*p=fun;将main函数下一条命令的地址改为了fun函数的地址,
故在程序运行的时候,main函数没有调用fun函数,而输出的结果是fun函数。
如图,为了改变b的值,可以利用p的地址,&p取得p的地址,*(int*)(&p+1)取得main函数ebp,将其强制类型转化为int *,(int *)(*(int *)(&p+1)),再找到b的地址
(int *)(*(int *)(&p+1))-1;解引用取得b的值*((int *)(*(int *)(&p+1))-1),最后可以赋值进而改变b的值。
中,定义了指针p,p指向a的地址,这里a的地址是实参a的地址,p--指向main函数下一条命令的地址,*p=fun;将main函数下一条命令的地址改为了fun函数的地址,
故在程序运行的时候,main函数没有调用fun函数,而输出的结果是fun函数。
如图,为了改变b的值,可以利用p的地址,&p取得p的地址,*(int*)(&p+1)取得main函数ebp,将其强制类型转化为int *,(int *)(*(int *)(&p+1)),再找到b的地址
(int *)(*(int *)(&p+1))-1;解引用取得b的值*((int *)(*(int *)(&p+1))-1),最后可以赋值进而改变b的值。
相关文章推荐
- [Android]在代码里运行另一个程序的方法
- DB2编程序技巧(1)
- DB2编程序技巧 (四)
- DB2编程序技巧 (六)
- DB2编程序技巧 (三)
- DB2编程序技巧 (九)
- DB2编程序技巧 (七)
- DB2编程序小小技巧
- DB2编程序技巧 (五)
- 二级域名原理以及程序
- DB2编程序技巧 (一)
- DB2编程序技巧 (八)
- DB2编程序技巧 (十)
- 如何隐藏程序的运行
- C#列出当前系统所有正在运行程序的方法
- 纯真、珊瑚虫文本IP数据库转成mdb 程序 提供下载
- 数据库性能优化三:程序操作优化提升性能
- C#实现强制关闭当前程序进程
- 一个用vbs查找硬盘所有分区中的指定程序的代码
- 一个域名查询的程序