1. 程式人生 > >如何檢視DLL檔案的匯出函式宣告

如何檢視DLL檔案的匯出函式宣告

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