PE檔案之dll匯出私有函式
阿新 • • 發佈:2022-03-06
最近在看《Windows PE 權威指南》,才看完匯出表。
動動手,跟著做一下好了。
看完這章,基本可以做一個網上常見的基本的PeInfo(pe檔案檢視器)了,
自己也寫了一個,但是還不太完整,不過還是有參考價值的。
工欲善其事必先利其器,沒有一個稱手的工具,效率上不去啊。
為什麼要自己寫,因為對別人的不滿意,而且自己能做。
不滿意又不能做,就只能接受別人的了。
Peinfo 實驗檔案實驗目的:匯出dll中的私有函式。
這裡僅記錄實驗過程,不涉及原理講解。
IDE:Dev-C++,簡潔方便,用來學習是很不錯的選擇。
一:編寫dll檔案
dll.h
#ifndef _DLL_H_ #define_DLL_H_#if BUILDING_DLL
#define DLLIMPORT __declspec(dllexport)
#else
#define DLLIMPORT __declspec(dllimport)
#endifDLLIMPORT void HelloWorld();
#endif
dllmain.c
/* Replace "dll.h" with the name of your header */ #include "dll.h" #include <windows.h>//匯出
DLLIMPORT void HelloWorld()
{
MessageBox(0,"Hello World from DLL!\n","Hi",MB_ICONINFORMATION);
}
//不匯出
int add(int a,int b)
{
return a + b;
}
直接編譯執行,就會生成dll檔案了。
2.定位匯出表的位置
不做過多解釋,直接看dll檔案2000H的地方。注意前面46H個位元組。
圈了一部分,但是太淡了。這裡不多解釋框出來的是什麼,事實上,對匯出表結構瞭解以後,光看這個位元組,就能知道大體幹什麼的了。
沒錯,就是這個了,只有一個HelloWorld的匯出函式。
typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; DWORD Name; DWORD Base; DWORD NumberOfFunctions; DWORD NumberOfNames; DWORD AddressOfFunctions; DWORD AddressOfNames; DWORD AddressOfNameOrdinals; } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
這個winnt.h裡面的匯出表的結構,剛開始寫的時候,還自己定位結構體,呵呵。