1. 程式人生 > 其它 >PE檔案之dll匯出私有函式

PE檔案之dll匯出私有函式

最近在看《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)
#endif

DLLIMPORT 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裡面的匯出表的結構,剛開始寫的時候,還自己定位結構體,呵呵。