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
文章插图
- DllName表示 Dll 的文件名
- @1 [可选] 指定导出的函数序号 。导出多个函数时,需要开发者自定义序号,不能重复 。
文章插图
3.设置工程属性
在 “属性”->“链接器”->“输入” 配置 模块定义文件输入 def文件名称 。
文章插图
【关于查看dll函数及参数 查看dll导出函数怎么用】4.编译生成 DLL
使用工具查看导出函数名接口,导出接口的顺序与 def文件定义的序号相同 。
文章插图
存在问题
- 通过工具可以查看导出函数名,暴露接口函数功能 。
- 导出的函数名可以任意被访问和使用,即使业务功能被封装在内部代码经过加密处理,但外部接口是公开的 , 可以被正常调用 。造成在不知情,被未经授权的开发者滥用,间接造成损失 。
匿名导出接口只需要在 def文件的导出接口名称增加 NONAME关键字即可,如下:
test_dll.def
文章插图
- NONAME表示不导出函数名称(匿名) 。
文章插图
访问匿名序号接口静态链接
和通常工程引用 DLL 的方法相同,引用 .h,链接 .lib,运行前将 .dll文件拷贝至应用运行目录即可 。
动态加载
通过动态加载的方式调用DLL接口 。
当导出序号时,定义函数指针变得复杂,只能通过静态反编译的方式确定参数数量和类型,定义函数指针 。
文章插图
注意:定义函数指针的类型声明必须与函数定义一致,否则无法正常使用 。
小结
- 静态链接的方式不变,不影响团队内部使用 。
- 匿名接口,不知情的开发者无法调用 DLL 接口功能,防止 DLL 功能被滥用 。
- 提高 DLL 破解难度,调用者无法通过函数名推测函数功能,增加分析接口功能、接口间业务逻辑关系的复杂程度 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 查看电脑主机配置的方式 如何查看电脑内存条型号和品牌参数
- 关于cad导jpg不清楚修复 cad导出jpg图片清晰度不够怎么办
- 默认网关的ip地址查看 怎么查询本机ip网关
- 关于ps剪辑笔记本电脑配置 ps剪辑视频用什么电脑
- 关于小米平板5和pro的性能介绍 小米平板5和5pro参数对比
- 关于分辨率与尺寸对照 22寸显示器分辨率多少合适
- ps全局实时缩略图使用 psd缩略图查看器插件
- 正确卸载wps图片查看器 wps图片卸载不了
- 怪物猎人p2怪物清单的查看 怪物猎人世界怪物图鉴怎么看
- 电脑cmd查看wifi密码 查看本机wifi密码命令