博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对vc++类和对象的逆向研究
阅读量:7014 次
发布时间:2019-06-28

本文共 561 字,大约阅读时间需要 1 分钟。

  hot3.png

经过反编译动态调试,vcpp的类实际上就是struct,跟delphi不同,它没有类头,而且所有的函数都直接放在函数表里头,跟普通的函数一样混在一起。而成员变量,则直接就在对象头开始算起,成员变量的结尾是0xfdfdfdfd,如果没有成员变量,则对象的开头就是0xfdfdfdfd。

举个例子:如果有1个int成员变量,则sizeof(class)=4;如果有2个int成员变量,则sizeof(class)=8; 如果没有,则sizeof(class)=1;

对象指针默认通过ecx传递,而delphi是第一个参数传递。

目标结论如下:

所以想要设计一个兼容delphi对象的c文件,让cpp当作一个类使用,是不合适的,因为它不是通过对象指针的偏移来调用成员函数的,而是直接跳转到了静态函数表。但是用struct调用函数指针还是可以的,这样其实就没必要使用cpp的类了,直接用c就可以了,而且函数指针更加灵活,方便定义和响应事件,以及多态,有着无与伦比的灵活优势,为什么我喜欢javascript呢,因为指针函数发挥的淋漓尽致。

逆向其他软件,比如游戏等,需要研究更多,比如虚函数等。

今天先这样,以后研究了再增加。。。

 

 

转载于:https://my.oschina.net/u/1777508/blog/2218888

你可能感兴趣的文章
算法学习笔记(四)---第k个二进制数字问题
查看>>
忘记sa密码,又删除了windows身份验证账号的解决方法
查看>>
Open-Falcon 监控系统监控 MySQL/Redis/MongoDB 状态监控
查看>>
1-4 Zabbix 用户管理
查看>>
Visual Studio 2017强制更新方法
查看>>
蓝牙设备探测工具blueranger
查看>>
我的友情链接
查看>>
KaliLinux常用服务配置教程DHCP服务工作流程
查看>>
js基础--javascript基础概念之数组
查看>>
date 输出格式
查看>>
Android控件TextView的实现原理分析
查看>>
java中异常的处理
查看>>
我的友情链接
查看>>
最小生成树算法——Prim和Kruskal算法的实现
查看>>
java循环中如何删除集合中的元素
查看>>
JFinal 2.2 国际化功能的应用
查看>>
Kafka性能调优
查看>>
python在webservice接口测试中的应用
查看>>
mysql数据库的基本操作
查看>>
nginx 编译安装实践
查看>>