使用def匯出動態鏈結庫(VC6)

2021-10-06 04:16:34 字數 1673 閱讀 4332

使用.def檔案匯出dll的好處是可以隱藏函式名,提高安全性。

首先新建dll工程,編寫函式,因為使用def匯出,所以編寫函式宣告和定義和普通exe的編寫方式一樣。

mydll.h

// mydll.h: inte***ce for the mydll class.

////

#if!

defined

(afx_mydll_h__a5062bac_c3ad_45fe_8909_494d8ebe125e__included_)

#define afx_mydll_h__a5062bac_c3ad_45fe_8909_494d8ebe125e__included_

#if _msc_ver >

1000

#pragma once

#endif // _msc_ver > 1000

int max

(int x, int y)

;int min

(int x, int y)

;int add

(int x, int y)

;int sub

(int x, int y)

;#endif // !defined(afx_mydll_h__a5062bac_c3ad_45fe_8909_494d8ebe125e__included_)

mydll.cpp

#include "stdafx.h"

#include "mydll.h"

int max

(int x, int y)

int min

(int x, int y)

int add

(int x, int y)

int sub

(int x, int y)

然後新增乙個 test.def 檔案到專案中(如果vc6開啟檔案或新增檔案崩潰,請安裝filetool.dll 補丁)

編寫如下內容

說明:@後面的數字是函式匯出序號,在dll的匯出表裡有乙個 addressofnameordinals 位址表,裡面存的值加上匯出表裡的base就是這裡的匯出序號了。

編譯生成的dll拿到 dependency walker 裡,可以看到如下結果:

註明了 noname 的 min 函式,其函式名已經隱藏起來了。

另乙個關鍵點是,我們在 def 中指定的匯出序號是不連續的,windows 計算匯出函式總數是用最大序號 - 最小序號 +1,因此得到了 16 - 12 + 1 = 5 個函式,其中序號14是不存在的,所以它的入口點是null。

VC 動態鏈結庫

mfc 一 建立dll 1 建立mfc動態鏈結庫,在第4部選擇 regular dll with mfc shared linked 型別,即建立與mfc動態鏈結的常規dll,可以被win32應用程式和mfc應用程式使用。2 新增函式。在生成的工程的test.h檔案中新增語句如下 extern c ...

動態鏈結庫使用 靜 動態鏈結庫使用總結

一 靜態庫編寫 1.首先當然是開vs然後建立乙個靜態庫工程啦 2.格式.一般有標頭檔案.h和原檔案.cpp,當然你也可以寫一在乙個cpp裡.mydll.h extends c mydll.cpp include mylib.h int sum int num1,int num2 int mult i...

使用動態鏈結庫

1.動態鏈結庫是程式執行時載入的庫,當動態鏈結庫正確安裝後,所有的程式都可以使用動態庫來執行程式。動態鏈結庫是目標檔案的集合,目標檔案在動態鏈結庫中的組織方式是按照特殊方式形成的。庫中函式和變數的位址是相對位址,不是絕對位址,其真實位址在呼叫動態庫的程式載入時形成。2.動態鏈結庫的名稱有別名 son...