飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2611|回复: 5

[讨论] C++ 导出类还原的问题

[复制链接]

该用户从未签到

发表于 2023-10-8 16:35:45 | 显示全部楼层 |阅读模式
我把问题整理备忘一下,有个 Dll (见附件)导出的函数中,和 CxImage 类相关的只有这四个函数:


  000B   000A   000015F0    ??1CxImage@@UAE@XZ  // public: virtual __thiscall CxImage::~CxImage(void)
  0013   0012   000F223C    ??_7CxImage@@6B@ < DATA >(1)  // const CxImage::`vftable'
  0016   0015   00001610    ??_FCxImage@@QAEXXZ  // public: void __thiscall CxImage::`default constructor closure'(void)
  0018   0017   00001620    ??_OCxImage@@QAEXAAV0@@Z  // public: void __thiscall CxImage::`copy constructor closure'(class CxImage &)


那么请问,源代码中 CxImage 这个类的代码是怎么写才能实现这个导出效果的。

// < DATA >(1)  说明虚表只有一项

kimage.dll.zip

579.63 KB, 下载次数: 2, 下载积分: 飘云币 -2 枚

目标 DLL

PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2023-10-8 17:30:53 | 显示全部楼层
补充下我的分析:

后三个导出是编译器自动生成的,首先你要解决怎么做到让编译器自动生成这三个导出函数。因为这三个是编译器默认生成的,所以源码应该是把整个类导出了,生成 `default constructor closure' 需要一个非默认构造,而导出中又不存在非默认构造。分析到这里感觉是出现了悖论 ...
PYG19周年生日快乐!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2023-10-9 10:54:15 | 显示全部楼层
虚表中仅存的一个函数为析构函数。
public: virtual __thiscall CxImage::~CxImage(void)
默认构造。
public: void __thiscall CxImage::`default ctor closure'(void)
复制构造。
public: void __thiscall CxImage::`copy ctor closure'(class CxImage &)
事实上,还额外存在由SDL自动生成的函数。
public: void __thiscall CxImage::__autoclassinit2(unsigned int)
这是用于初始化类内指针成员的。暗示了类内存在指针成员。

点评

多谢 ~  详情 回复 发表于 2023-10-11 13:56
PYG19周年生日快乐!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2023-10-11 13:56:24 | 显示全部楼层
鲲鹏 发表于 2023-10-9 10:54
虚表中仅存的一个函数为析构函数。
public: virtual __thiscall CxImage::~CxImage(void)
默认构造。




多谢 ~
PYG19周年生日快乐!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表