c++ THUNK技术
这里想说的是:代码中的关键点为用指令jmp pFunc跳转到你想要运行的函数pFunc。
指令“jmp xxxx”占5个字节,代码中用了个一字节对齐的结构体struct Thunk ,
当然也能够用 unsigned char code[5]; 说还有一个关键点就是地址计算了,jmp xxxx指令用了相对跳转地址,
相对地址 = 要跳转函数的地址 - “jmp xxxx”指令的下一条指令的地址。
以下代码中的class C 仅仅有m_thunk一个数据成员,没有虚函数和在m_thunk前没有声明别的数据成员,
因此相对地址 = pFunc - [ (int)this + sizeof(struct Thunk) ]
如上所述,若有虚函数和在m_thunk前声明了别的数据成员,则相对地址的计算要做改动。
:)本来画个表会说得比較清楚,但本人嫌麻烦,就作罢了!
/////////////////////////////////////////////以下是所转的文章////////////////////////////////////////////////////////////////////////////////
实际上C++ 的THUNK技术是须要改变指令代码的,这里发一个贴说明之 //所以EIP内容为(int)this+sizeof(Thunk) |
最新文章
- Python(九)Tornado web 框架
- ASP.net封装
- 在SQL Server中添加供应用程序使用的帐号
- python---字符编码
- DWZ框架学习
- JS学习第三课
- 教程:在 VM Depot 中查找 Azure 可用的虚拟机镜像
- C++经典KMP算法的实现
- mysql忘记root密码 + 授权登录
- redhat 时区修改
- Several ports (8005, 8080, 8009)被占用
- WPF:使用TypeConverter
- 百度上传插件---webuploader的使用
- html5 渐变按钮练习
- FM(Factorization Machines)模型详解
- 使用fiddler模拟session失效的测试方法
- cobaltstrike3.8服务器搭建及使用
- SQL Server数据库(时间戳timestamp)类型 (转载)
- (转载)http和socket之长连接和短连接区别
- Django web project
热门文章
- php数组操作函数
- apache的域名添加虚拟端口号
- 在java代码中显示json字符串(怎么避免json字符串中双引号在java代码中显示)
- asp.mvc获取checkbox、radio、select的值
- Repeater的ItemDataBound 事件中e.Item.DataItem 的数据类型
- Android开发手记(10) 下拉菜单Spinner
- 如何在github上传自己的项目
- 25 读取jar包内log4j.properties文件方法
- impdp/expdp 总结
- 1像素HR技巧(兼容各浏览器)