《反勒索软件开发笔记》(三)导入表处理
程序员文章站
2024-01-23 16:15:10
...
DLL导出表处理
防止别人猜到函数功能,所以要对导出表函数名进行处理,一般就是使用宏定义代替函数名,然后后面使用宏定义代替原有函数名,如下:
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLLTEST_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// DLLTEST_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#define DLLTEST_API_EC extern "C" __declspec(dllexport) // cdecl stdll
#else
#define DLLTEST_API_EC extern "C" __declspec(dllimport)
#define DLLTEST_API __declspec(dllimport)
#endif
#define DllTest_X2 DLLTEST_0
#define DllTest_X2_EC DLLTEST_0_EC
DLLTEST_API int DllTest_X2(int i);
DLLTEST_API_EC int DllTest_X2_EC(int i);
int WINAPI DllTest_X2_STD(int i);
另外注意extern c的话不要使用stdcall调用,防止奔溃。
或者可以使用def文件,修改函数导出的名字
def文件使用
首先定义
int WINAPI DllTest_X2_STD(int i);
{
return 0;
}
然后再def实现里
LIBRARY "DllTest"
EXPORTS
DLLTEST_0_STD = DllTest_X2_STD//等号前是导出表里的函数的名字,等号后面试定义里函数的名字
参考资料
DLL编写中extern “C”和__stdcall的作用
https://blog.csdn.net/dongchongyang/article/details/52926310
下一篇: Oracle中时间相关函数
推荐阅读