2023-10-31 236
C/C++ 导出 DLL 函数的一般方法
通常项目中导出 DLL 接口有两种方式:
1. __declspec(dllexport)导出;
2.*.def 文件导出。
__declspec(dllexport) 导出
在 DLL 导出的函数名称前使用 _declspec(dllexport)关键字导出函数接口。
test_dll.h
test_dll.cpp
def 文件导出
由于 __declspec(dllexport)导出接口需要定义一长串的内容,所以 MS 引入 def文件来导出函数接口。 使用 def文件相对简单,只需要在项目中增加一个后缀名为 .def 的文件,按照格式将 DLL 需要导出的接口定义在 def 文件即可。
1.定义 .def 文件
test_dll.def
2.添加 def 文件至工程
3.设置工程属性
在 “属性”->“链接器”->“输入” 配置 模块定义文件输入 def文件名称。
4.编译生成 DLL
使用工具查看导出函数名接口,导出接口的顺序与 def文件定义的序号相同。
存在问题
解决方案:导出匿名接口导出匿名序号接口
匿名导出接口只需要在 def文件的导出接口名称增加 NONAME关键字即可,如下:
test_dll.def
使用 CFF Explorer工具查看导出函数接口名称,函数名称已经被隐藏掉。
访问匿名序号接口静态链接
和通常工程引用 DLL 的方法相同,引用 .h,链接 .lib,运行前将 .dll文件拷贝至应用运行目录即可。
动态加载
通过动态加载的方式调用DLL接口。
当导出序号时,定义函数指针变得复杂,只能通过静态反编译的方式确定参数数量和类型,定义函数指针。
注意:定义函数指针的类型声明必须与函数定义一致,否则无法正常使用。
小结
匿名导出 DLL 接口能够一定程度提升安全性,但使用 IDA 等静态反编译工具逆向代码逻辑,能够找到函数的接口参数类型,并且大致了解接口内部实现逻辑(没有函数名,逆向分析的难度已经加大),如果要进一步提升 DLL 的安全性,需要使用加壳工具进行保护或采用其他的安全防护手段。
喜欢 (0)
原文链接:http://www.tpbz008.cn/post/41357.html
=========================================
http://www.tpbz008.cn/ 为 “电脑技术吧” 唯一官方服务平台,请勿相信其他任何渠道。
系统使用 2023-04-23
应用技巧 2023-07-01
电脑技术 2023-10-29
应用技巧 2023-11-14
应用技巧 2022-11-20
系统使用 2022-11-15
应用技巧 2023-03-09
系统使用 2022-11-21
应用技巧 2023-03-14
应用技巧 2023-02-14
扫码二维码
获取最新动态