萬能動態庫調用工具IDMA
開發者:馬兆瑞 QQ/微信:624762543
版本說明及下載鏈接:
【V20.1.9】版本說明:1、修復出參對漢字長度截取錯誤,出現數組超出索引。 2、修復入參漢字無法緩存問題。3、對unsigned char、char等入參自動識別為整數類型。
CSDN下載鏈接:https://download.csdn.net/download/mzhrdd/12095452
百度雲下載鏈接:https://pan.baidu.com/s/1VMRgIfInav3Ih-x0WLP6vg 提取碼: 3cd4
【V3.3】版本說明:1、修復通過鼠標右鍵插入參數時參數勾選異常問題
百度雲下載鏈接:https://pan.baidu.com/s/1Rh2evdcqL8REiPSKNhVH7w 提取碼: 9e6x
【V3.2】版本說明:1、參數勾選框更易選中 2、試用期延長為90天
CSDN下載鏈接:https://download.csdn.net/download/mzhrdd/10925695
百度雲下載鏈接:https://pan.baidu.com/s/1R4YS2P3-PKt1rhM-8JnUBg
【V3.0】版本說明:1、修復HEX出參解析Bug 2、緩存已調用函數的入參,方便再次調用
百度雲下載鏈接:https://pan.baidu.com/s/1c3670kw
【V2.0】版本說明:初版
CSDN下載鏈接:http://download.csdn.net/download/mzhrdd/10138218
百度雲下載鏈接:https://pan.baidu.com/s/1o864oFg
如以上資源不能下載,請從原文出處獲取最新下載鏈接:
博客原文:http://www.cnblogs.com/mzhrd/p/7927582.html
1. 工具簡介
1.1 工具示意圖
1.2 功能簡介
InvokeDllMethodsAdvance簡稱IDMA,是一個萬能的動態庫調用工具,不用編寫任何代碼,就可以調用符合WINAPI標准的任意動態庫文件(WINAPI標准即__stdcall調用約定)。
此工具非常適合上位機軟件開發或測試人員,可以省去編寫demo的時間,直接使用此工具進行調試,有助於開發人員將更多的時間集中在功能開發上。
本工具的主要優點如下:
不用編寫任何代碼,即可調用動態鏈接庫。
適合入職新員工或不懂動態鏈接庫調用的人使用。
可以免去測試demo的編寫, 減輕開發人員工作量。
非常適合動態鏈接庫的開發調試、測試等工作。
1.3 技術實現
該工具界面主要使用C# WinForm編寫,運行依賴於.net framework 4.0環境,底層采用C++封裝,用匯編實現對函數的動態調用(函數參數的入棧及調用)
1.4 安裝使用
該工具為綠色版,無需安裝,直接運行 即可,如果提示缺少.NET環境,則安裝 文件夾下的 后,再嘗試運行該工具。
2. 主要功能及使用介紹
2.1 主要步驟
1、選擇所要調用的動態庫文件
2、選擇動態庫配套的頭文件及函數
3、填寫完參數后,調用該函數
4、函數的出參或返回值會展示在對應的位置
2.2 選擇動態庫
該操作完成對動態庫的加載LoadLibrary
2.2.1 選擇動態庫方式一:通過瀏覽文件選擇
點擊 按鈕可通過瀏覽的方式選擇所要調用的動態庫。
2.2.2 選擇動態庫方式二:通過拖拽文件選擇
拖拽所要調用的動態庫文件至動態庫路徑文本框。
2.2.3 選擇動態庫方式三:同時拖拽動態庫和頭文件
拖拽所要調用的動態庫文件及頭文件,至參數列表表格DataGridView。
2.3 選擇頭文件及函數
選擇頭文件的方式有三種,同上節中的動態庫選擇,一種通過按鈕的方式,兩種通過拖拽的方式。
2.3.1 獲取函數的方式一:選擇頭文件
通過選擇頭文件建立一個快速的函數切換列表,並自動將選定的函數參數拆分,便於填寫和查看出入參。
選定一個函數后,工具會自動將函數拆分出參數類型、參數名稱、參數數值、入參/出參、數據格式,如果自動分析出的入參/出參類型、數據格式等不符合實際情況,需自行勾選更改。(參數數值、入參/出參、數據格式是調用函數時最重要的三部分,只要這三部分設置正確,參數類型、參數名稱的對錯不影響函數的調用,無需關心。關於數據格式的詳細說明請見附錄)
注:1、頭文件中的一個函數只能占一行,不符合需修改后再使用。
2、解析函數功能會自動忽略以下開頭的行:/ # { } extern
2.3.2 獲取函數的方式二:手動填寫函數名及參數
也可以不選擇頭文件,手動在 中填寫需要調用函數名,並在參數列表中追加需要的參數。追加或插入的參數默認為空行,參數數值、入參/出參、數據格式是調用函數時最重要的三部分,只要這三部分填寫正確,參數類型、參數名稱可不填寫。關於數據格式的詳細說明請見附錄
2.3.3 關於函數名及參數的調整
不管通過哪種方式獲取的函數,都可以通過手動修改的方式,對函數名及參數進行調整。
通過右擊已添加參數的行首,或底部的 按鈕,可對函數的參數個數進行調整
2.4 工具使用示例
在 文件夾下存在一個測試用的動態庫文件: ,該動態庫導出了一個名為add的函數,函數的具體內部實現如下:
extern "C" int __stdcall add(int num1, int num2, int *multi)
{
*multi = num1 * num2;
return num1 + num2;
}
使用工具調用該動態庫的示例如下:
1、選擇所要調用的動態庫文件。點擊選擇動態庫按鈕,通過文件瀏覽的方式選擇test.dll,選擇完成后在Path中會顯示dll文件的全路徑。如下圖一。
2、選擇動態庫配套的頭文件及函數。點擊選擇頭文件按鈕,通過文件瀏覽的方式選擇test.h,選擇完成后在Methods下拉列表中會顯示從.h中解析出的所有函數。本示例選擇add函數,如下圖一。
3、填寫完參數后,調用該函數。在Methods下拉列表中選擇add函數后,程序會自動解析並將函數的所有參數展示在下方的表格中,填寫完入參后,點擊Invoke按鈕。本示例填寫的入參為6和8,如下圖一。
4、函數的出參或返回值會展示在對應的位置。本示例的出參為48,返回值為14,如下圖二。(0xE是14的十六進制等價顯示)
圖一
圖二
附錄 關於參數數據格式的詳細說明
本工具將所有的數據類型歸為5大類:HEX、整數、字符串、單精度小數、雙精度小數。
HEX:為最基礎的數據類型,也是最強大的數據類型,可以用來表示任何數據類型(包括結構體),其本質為變量在內存中的實際存儲結構,一般用來傳遞數組(十六進制字符串)。其作為出參時只顯示內容的第一個字節,后面的內容用*省略,可雙擊變量地址,根據實際情況輸入需要查看的長度,才可查看完整數據。
例如:int temp1 = 1,則用HEX表示為:01000000,因為int在內存中是低字節在前,共占4個字節
unsigned char temp2[] = {0x12, 0x34, 0x56},則用HEX表示為:123456
char temp3[] = “123456”,則用HEX表示為:313233343536.(因字符’1’的ASCII碼為49=0x31)
整數:用來表示常見的數字類型的變量,例如int、long、short等。(如果unsigned char用來表示整數,也需要指定為整數類型)
字符串:用來表示可見字符串,例如“123456”,不可見字符串請用HEX類型(如上述temp2)。
單精度小數:用來表示單精度小數類型,例如float
雙精度小數:用來表示雙精度小數類型,例如double
注:工具中會自動將帶&或*的參數識別為出參,其余的算作入參,如與實際情況不符,請自行調整。