天天看點

如何檢視DLL的函數聲明

如何檢視DLL的函數聲明 2007-08-28 09:23 轉貼自:http://blog.csdn.net/uvbs/archive/2006/01/27/589346.aspx Depends.exe 是 Visual C++ 自帶的一個工具。它可能是我們經常使用的工具中最簡單的一個工具了,其功能是列出某個應用程式或 DLL 需要的 DLLs。這個程式在本站可以下載下傳(更新版本請到下面這個位址下載下傳:http://www.dependencywalker.com)。如果你需要看某個 DLL 或可執行檔案的全路經,可以用它的上下文菜單進行設定。 近期很多兄弟們問怎麼樣打包程式,如何擷取所需dll的資訊,這就需要使用VC所帶的Depends軟體,該軟體在VC6安裝目錄下的tools檔案夾裡面 D:/Microsoft Visual Studio/Common/Tools,直接 輕按兩下執行,然後打開exe檔案即可,它主要有下面幾個注意事項: 1)所編的軟體所需的Dll檔案,可以得到相應的Dll路徑,版本,屬性等。 2)視窗分四部分: 左上角是Dll資訊視窗,顯示你程式所需的Dll子產品, 右邊第一個視窗是所選的Dll子產品所使用的函數, 右邊第二個視窗是所選Dll子產品的所有的導出函數, 下面視窗是所有需要的Dll子產品的屬性 3)右邊兩個視窗出現四個标簽:序号,提示,函數,入口點 如果利用導出是函數,那麼出現函數名,如果導出的是序号,那麼函數項就是N/A(無法顯示) 出現紅色提示表示不正常,一般為沒有該導出函數 4)該工具得到的是你軟體中隐式連結的Dll庫,也就是用lib關聯的Dll子產品, 無法顯示顯式連結的Dll子產品,也就是用LoadLibrary函數導入的Dll函數。(切記切記!) 5)無法提供Borland C++ Builder所提供的Dll檔案,無法提供vxd軟體的調用 ============================================================================= Q : 如何檢視動态庫接口函數的參數??? 主要解答者: jyu1221 送出人: ghj1976 感謝: jyu1221 稽核者: ghj1976 論壇對應貼子: 檢視 A : 使用Microsoft Visual Studio的工具DEPENDS.EXE可以檢視動态庫的接口函數,但如何能夠看到這個動态庫接口函數的參數呢? --------------------------------------------------------------- 可以通過反彙編來知道接口函數的參數,建議使用W32DSM來分析,也可以直接使用VC來分析,就是麻煩一點。 現在使用W32DSM來具體說明: 1。先打開需要分析的DLL,然後通過菜單功能-》出口來找到需要分析的函數,輕按兩下就可以了。 它可以直接定位到該函數。 2。看準該函數的入口,一般函數是以以下代碼作為入口點的。 push ebp mov ebp, esp ... 3。然後往下找到該函數的出口,一般函數出口有以下語句。 ... ret xxxx;//其中xxxx就是函數差數的所有的位元組數,為4的倍數,xxxx除以4得到的結果 就是參數的個數。 其中參數存放的地方: ebp+08 //第一個參數 ebp+0C //第二個參數 ebp+10 //第三個參數 ebp+14 //第四個參數 ebp+18 //第五個參數 ebp+1C //第六個參數 。。。。 ------------------------------------------- 還有一種經常看到的調用方式: sub esp,xxxx //開頭部分 //函數的内容 。。。 //函數的内容 add esp,xxxx ret //結尾部分 其中xxxx/4的結果也是參數的個數。 ------------------------------------------------- 還有一種調用方式: 有于該函數比較簡單,沒有參數的壓棧過程, 裡面的 esp+04就是第一個參數 esp+08就是第二個參數 。。。 esp+xx就是第xx/4個參數 你說看到的xx的最大數除以4後的結果,就是該函數所傳遞的參數的個數。 ---------------------------------------------- 到現在位置,你應該能很清楚的看到了傳遞的參數的個數。至于傳遞的是些什麼内容,還需要進一步的分析。 最友善的辦法就是先找到是什麼軟體在調用此函數,然後通過調試的技術,找到該函數被調用的地方。一般都是PUSH指令 來實作參數的傳遞的。這時可以看一下具體是什麼東西被壓入堆棧了,一般來說,如果參數是整數,一看就可以知道了, 如果是字元串的話也是比較簡單的,隻要到那個位址上面去看一下就可以了。 如果傳遞的結構的話,沒有很友善的辦法解決,就是讀懂該彙編就可以了。對于以上的分析,本人隻其到了抛磚引玉, 希望對大家有點用處。 http://topic.csdn.net/t/20030226/15/1468772.html

繼續閱讀