我有一箇舊的VB6應用程序,我不確定哪些代碼被用來編譯它。源代碼的一個修訂版在kernel32.dll中調用Sleep。如何判斷DLL函數是否從VB6 exe被調用?
有沒有辦法找出exe是否在DLL中調用特定的函數?我可以看到kernel32.dll通過使用「Dependency Walker」工具鏈接,但似乎沒有告訴我從exe中調用了特定的函數。
我有一箇舊的VB6應用程序,我不確定哪些代碼被用來編譯它。源代碼的一個修訂版在kernel32.dll中調用Sleep。如何判斷DLL函數是否從VB6 exe被調用?
有沒有辦法找出exe是否在DLL中調用特定的函數?我可以看到kernel32.dll通過使用「Dependency Walker」工具鏈接,但似乎沒有告訴我從exe中調用了特定的函數。
您可以使用Process Explorer來查看哪些DLL函數在運行時被exe調用。
如果您可以在調試器中運行該程序,則可以始終在interrest函數的地址處設置斷點。當然,那麼你必須觸發對導入函數的實際調用。
您也可以嘗試在反彙編程序中加載程序,看看是否有任何引用,但不會捕獲任何動態加載的函數。一個工具看看是PE Explorer。我不確定這是否適用於VB6程序,因爲dll導入代碼可能會動態加載函數(使用GetProcAddress等)。
在Dependency Walker中,您可以使用Profile命令。
這允許您跟蹤並查看調用哪些方法。
+1對於調試器。任何人都想發佈有關使用WinDbg的分步說明?我非常肯定VB6 DLL導入代碼會動態加載這些函數 - 如果DLL中不存在指定的函數,那麼在調用該函數時會出現運行時錯誤。不在應用程序加載時。 – MarkJ 2010-05-17 16:12:41