调用栈相关。--飞雪所为
来源:互联网 发布:java高并发分布式视频 编辑:程序博客网 时间:2024/04/27 22:21
class Test{public: int i; int j;};void crashme(Test* t){ // ?? 在这里干点什么能让下面的代码崩溃}int main(int argc, char** argv){ Test *t = new Test; crashme(t); t->i = 4; // 要求程序在这里出错崩溃}1.#include <windows.h>void crashme(Test* t) { int v = 123;WriteProcessMemory(GetCurrentProcess(), (void*)(*((int*)&t-1) + 8), &v, 1, NULL);//相当于动态修程序的代码} 2.void __stdcall crashme(Test* t) { *((int*)&t-1) += 9;//修改返回地址,如果是cdecl的话esp不方便修复...} int main(int argc, char** argv) { Test *t = new Test; t->i = 123; crashme(t); t->i = 4; cout <<t->i <<endl;// 输出的不是4 return 0; }
在crashme函数中对t做点什么破坏可以让t在下一次使用时会引起程序崩溃?
直觉上delete t似乎就可以,但实际上并不会引起崩溃。不知还能干点什么破坏t的内容。。。
*(int*)(*((int*)&t - 2) - 4) = 0;
注释一下:
&t为参数地址
(int*)&t - 1为返回的eip的地址
(int*)&t - 2为存储主调函数ebp的地址
(*((int*)&t - 2)为主调函数ebp的值
(*((int*)&t - 2) - 4)为主调函数中t的地址
*(int*)(*((int*)&t - 2) - 4) = 0;让主调函数中的t为0
- 调用栈相关。--飞雪所为
- 飞雪
- 六月飞雪
- 天外飞雪
- 弄清C++在幕后为你所写、所调用的函数
- 条款 45: 弄清 C++在幕后为你所写、所调用的函数
- 弄清C++在幕后为你所写、所调用的函数
- 将所获取的行集合 转换为Map封装为类 供调用
- effective C++笔记之条款45: 弄清C++在幕后为你所写、所调用的函数
- js 所传参数为一个函数体 的 函数调用
- js 所传参数为一个函数体 的 函数调用
- 写在飞雪如絮时
- 漫天飞雪贺新春
- 飘.羽飞雪
- photoshop六月飞雪效果
- 三月飞雪哇
- 6月飞雪
- 飞雪桌面日历注册码
- 编码转换工具native2ascii的使用
- winxp 下 硬盘 装 suse linux
- 读取并修改App.config文件
- 于Java的相关技术网站
- 【zt】可以让你少奋斗10年的工作经验
- 调用栈相关。--飞雪所为
- div背景图片不显示的问题
- 从B表中检索数据,和A表匹配。。根据别人的问题写的。带注释
- DataReader和DataSet的区别
- Deploying Forefront Client Security at Microsoft
- 还原ORACLE DUMP 的值
- 通过OpenCA 构建PKI
- Matlab axes的使用
- linux 安装 hadoop