《反勒索軟件開發筆記》(三)導入表處理

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

發佈了168 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章