欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《反勒索软件开发笔记》(三)导入表处理

程序员文章站 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