全网唯一标准王
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202210351135.7 (22)申请日 2022.04.02 (71)申请人 深圳软牛科技有限公司 地址 518000 广东省深圳市宝安区新 安街 道海旺社区兴业路1100号金利通金融 中心大厦2栋13 01-1310 (72)发明人 王功华 江泽龙 李盛  (74)专利代理 机构 深圳市特讯知识产权代理事 务所(普通 合伙) 44653 专利代理师 孟智广 (51)Int.Cl. G06F 9/445(2018.01) (54)发明名称 动态库导出符号的隐藏方法、 装置、 设备及 存储介质 (57)摘要 本发明提供了一种动态库导出符号的隐藏 方法、 装置、 设备及存储介质, 其中方法包括: 构 建一个含有虚函数的C++类; 将所述C++类的虚函 数表作为动态库导出符号的入口; 将要导出的每 一个函数或功能代码放到所述C++类的每一个函 虚数里进行调用; 构建一个的导出函数, 在所述 导出函数中创建并返回所述C++类对象的指针。 本发明的方法把对外导出的符号放入虚函数表 中, 因为对于虚函数的调用, 是依据虚函数索引 的偏移量进行调用的。 通过抽象类, 定义一组调 用的虚函数, 作为导出要导出的函数, 而真正的 导出函数, 只需要提供一个 返回抽象类接口的指 针地址的函数即可, 充分利用了虚函数的特性, 步骤简单, 实现更加方便 。 权利要求书1页 说明书8页 附图2页 CN 114741131 A 2022.07.12 CN 114741131 A 1.一种动态库导出符号的隐藏方法, 其特 征在于, 包括: 构建一个含有虚函数的C+ +类; 将所述C+ +类的虚函数表作为动态库导出符号的入口; 将要导出的每一个函数或功能代码放到所述C+ +类的每一个函虚数 里进行调用; 构建一个的导出函数, 在所述 导出函数中创建并返回所述C+ +类对象的指针。 2.根据权利要求1所述的动态库导出符号的隐藏方法, 其特 征在于, 还 包括: 提供一个宏, 通过所述宏来展开所述导出函数调用返回指针的类型转换, 以简化调用 代码的书 写。 3.根据权利要求1所述的动态库导出符号的隐藏方法, 其特征在于, 在所述C++类 中, 所 有的对外功能均由所述C+ +类的虚函数提供。 4.根据权利要求1所述的动态库导出符号的隐藏方法, 其特征在于, 所述将所述C++类 的虚函数表作为动态库导出符号的入口包括: 先定义一个抽象的接口类, 再定义一个可实 例化的类从所述接口类继承, 以实现将所述C+ +类的虚函数表作为动态库导出符号的入口。 5.根据权利要求1所述的动态库导出符号的隐藏方法, 其特征在于, 所述将所述C++类 的虚函数表作为动态库导出符号的入口包括: 将所述C++类中要导出的函数定义为虚函数 并实现所述虚函数, 以实现将所述C+ +类的虚函数表作为动态库导出符号的入口。 6.根据权利要求1所述的动态库导出符号的隐藏方法, 其特征在于, 动态库的每一个导 出符号对应于所述C+ +类的一个虚函数的实现。 7.根据权利要求1所述的动态库导出符号的隐藏方法, 其特征在于, 所述导出函数以C 函数的方式导出。 8.一种动态库导出符号的隐藏装置, 其特征在于, 所述动态库导出符号的隐藏装置包 括: 第一构建模块, 用于构建一个含有虚函数的C+ +类; 入口定义模块, 用于将所述C+ +类的虚函数表作为动态库导出符号的入口; 调用定义模块, 用于将要导出的每一个函数或功能代码放到所述C++类的每一个函虚 数里进行调用; 第二构建模块, 用于构建一个的导出函数, 在所述导出函数中创建并返回所述C++类对 象的指针。 9.一种动态库导出符号的隐藏设备, 其特征在于, 所述动态库导出符号的隐藏设备包 括: 存储器和至少一个处理器, 所述存储器中存储有指 令, 所述存储器和所述至少一个处理 器通过线路互连; 所述至少一个处理器调用所述存储器中的所述指令, 以使得所述动态库导出符号的隐 藏设备执行如权利要求1 ‑7中任一项所述的动态库导出符号的隐藏方法。 10.一种计算机可读存储介质, 所述计算机可读存储介质上存储有计算机程序, 其特征 在于, 所述计算机程序被处理器执行时实现如权利要求1 ‑7中任一项所述的动态库导出符 号的隐藏方法。权 利 要 求 书 1/1 页 2 CN 114741131 A 2动态库导出符 号的隐藏 方法、 装置、 设备及存储介质 技术领域 [0001]本发明涉及动 态库技术领域, 尤其涉及一种动 态库导出符号的隐藏方法、 装置、 设 备及存储介质。 背景技术 [0002]在软件开发领域, 软件越来越复杂, 需要按功能封装到不同的模块中, 最常动的便 是静态库和 动态库, 导出符号, 便是模块与外界沟通的桥梁。 在产品发布后, 竞争对手, 可以 通过导出符号表, 来对模块的功能做 一个了解, 如果导出符号望名知义时, 甚至可以直接调 用该动态库, 使用该库的功能。 特别是C+ +的导出符号, 里面包括了函数的完整签名信息 。 [0003]对于核心模块, 通常会对导出符号添加某些隐藏方案 的保护措施, 来隐藏动态库 所提供的功能。 当前常见的符号隐藏方案, 有下面几种: 一种是使用无意义的符号来替换正 成的函数名, 另一种是手动构建, 调用符号表, 现有的这几种符号隐藏方案要么没有实现真 正意义的符号隐藏, 要么开发方式繁琐, 难以满足动态库导出符号的隐藏需求。 [0004]因此, 现有技 术还有待于改进和发展。 发明内容 [0005]本发明的主要目的在于解决现有动 态库导出符号的隐藏方法步骤繁琐, 实现不便 的技术问题。 [0006]本发明第一方面 提供了一种动态库导出符号的隐藏方法, 包括: [0007]构建一个含有虚函数的C+ +类; [0008]将所述C+ +类的虚函数表作为动态库导出符号的入口; [0009]将要导出的每一个函数或功能代码放到所述C+ +类的每一个函虚数 里进行调用; [0010]构建一个的导出函数, 在所述 导出函数中创建并返回所述C+ +类对象的指针。 [0011]在本发明第一方面一种可选的实施方式中, 所述的动态库导出符号的隐藏方法还 包括: [0012]提供一个宏, 通过所述宏来展开所述导出函数调用返回指针的类型转换, 以简化 调用代码的书 写。 [0013]在本发明第一方面一种可选的实施方式中, 在所述C++类中, 所有的对外功能均由 所述C++类的虚函数提供。 [0014]在本发明第一方面一种可选 的实施方式中, 所述将所述C++类 的虚函数表作为动 态库导出符号的入口包括: 先定义一个抽象的接口类, 再定义一个可实例化的类从所述接 口类继承, 以实现将所述C+ +类的虚函数表作为动态库导出符号的入口。 [0015]在本发明第一方面一种可选 的实施方式中, 所述将所述C++类 的虚函数表作为动 态库导出符号的入口包括: 将所述C++类中要导出的函数定义为虚 函数并实现所述虚 函数, 以实现将所述C+ +类的虚函数表作为动态库导出符号的入口。 [0016]在本发明第一方面一种可选的实施方式中, 动 态库的每一个导出符号对应于所述说 明 书 1/8 页 3 CN 114741131 A 3

.PDF文档 专利 动态库导出符号的隐藏方法、装置、设备及存储介质

文档预览
中文文档 12 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共12页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 动态库导出符号的隐藏方法、装置、设备及存储介质 第 1 页 专利 动态库导出符号的隐藏方法、装置、设备及存储介质 第 2 页 专利 动态库导出符号的隐藏方法、装置、设备及存储介质 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 00:03:20上传分享
友情链接
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。