回答
簡而言之,沒有簡單的方法來做你想做的事。不過,您可以使用反彙編程序庫(例如distorm)來反彙編出口入口點的代碼。有一些可以使用的啓發式方法,但其中很多僅適用於32位調用約定(__stdcall
和__cdecl
)。就我個人而言,我發現它的Python綁定有用,但libdasm可以做同樣的事情。
其他任何具有反彙編功能的工具都具有很大的價值,比如OllyDbg或Immunity Debugger。
注:,如果你有一個已經調用有問題的DLL的程序,這是大部分時間非常值得運行調試器(當然只有在代碼可以信任下,但你的問題基本上意味着)並在導出的函數中設置斷點。從這一點上,您可以從運行時行爲和運行目標的堆棧內容中推斷出更多。但是,這仍然是棘手的 - 特別是在__cdecl
其中函數可能需要任意數量的參數。在這種情況下,您必須篩選外部參數的調用程序到相應的函數,並根據call
的堆棧清理推斷它拋棄了多少個參數/字節。當然,在call
之前查看push
指令也會具有一定價值,但它需要一點經驗,尤其是在呼叫嵌套時,您必須辨別哪個push
屬於哪個call
。
基本上你將不得不制定出一套最小的匹配你的情況,除非你已經許可的昂貴的工具之一(和知道如何操縱他們)來與自己的啓發式啓發式的,通常經過微調調整了很長時間。
如果您碰巧擁有IDA Pro(或Hex-Rays插件)許可證,那麼您當然應該使用該許可證。另外,雖然相對落後,freeware versions of IDA可以處理32位x86 PE文件(當然包括DLL),但根據您正在開發的項目(「不允許商業用途」),許可證可能會成爲障礙。
您可以使用dependency walker。
您可以找到dumpbin
或Dependency Walker中導出的函數名。但要知道如何調用這些函數,你真的需要一個頭文件和一些文檔。如果你沒有這些,那麼你將不得不逆向工程DLL,這是一個非常具有挑戰性的任務。
- 1. 如何反編譯C++ dll?
- 2. 我們可以反編譯一個C#DLL到VB.NET
- 3. PInvoke在編譯時不知道DLL嗎?
- 4. 如何在反編譯C#dll後編譯dll?
- 5. dotPeek反編譯DLL
- 6. .dll反編譯器
- 7. 在C DLL,在C#中使用的PInvoke
- 8. 我想反編譯有一個使用visual studio c#創建的dll,但不是.NET dll。 .NET反射聲明
- 9. 編譯和反編譯dll文件
- 10. c#DLL只能編譯一個類
- 11. 反編譯文件.dll
- 12. 編譯一些dll到另一個dll
- 13. C#反編譯
- 14. PInvoke或使用/ clr:pure來編譯
- 15. pInvoke C#DLL導入問題
- 16. 是否可以使用Turbo C/C++編譯器生成DLL?
- 17. 找不到PInvoke DLL kernel32.dll文件C#
- 18. 可以將C程序編譯爲DLL
- 19. 的PInvoke DLL中的函數用C
- 20. 反向pinvoke char * []使用StringBuilder
- 21. PInvoke Nikon C++ DLL函數來自c#
- 22. C#AsyncStateMachine反編譯
- 23. 編譯一個C#項目到一個DLL
- 24. GCC使用__stdcall編譯dll
- 25. 使用gcc編譯DLL
- 26. 「找不到PInvoke DLL」sqlceme35.dll「
- 27. 如何使用PInvoke從c#導入C++ dll?
- 28. 編譯C#.NET的DLL VB6
- 29. SWIG C++預編譯DLL
- 30. C#dll文件編譯
依賴性步行者只顯示導出函數的名稱,而不是整個簽名 – Praetorian 2012-03-20 19:41:13