2009-02-25 81 views
2

如何確定VB6(或5)應用程序不啓動的原因?因此,我無法附加調試器。我有我的IDA Pro免費軟件,但需要一些指導,以從哪裏開始。調試不啓動的程序

我沒有這個程序的源代碼,只有.exe。當我說它沒有啓動時,我雙擊.exe,沒有任何反應 - 沒有任何進程在運行 - nadda。

在admin下運行它會創建三個空文件夾,然後在顯示UI之前以靜默方式退出。 OllyDbg告訴我有一個'不精確的浮點結果',但我需要花幾個小時或幾天的時間來學習OllyDbg給我的所有信息。我的書Advanced Windows Debugging應該在週一或週二抵達。

+0

@ProfK - 你能詳細說明一下沒有開始嗎?根本不運行?或運行,但沒有顯示任何東西?即顯示在ctrl + alt + del? – melaos 2009-02-25 09:45:20

+0

我已經詳細闡述過了。 – ProfK 2009-02-26 11:35:22

+0

等一下,如果你沒有源代碼,你期望如何調試它? – 2009-03-12 16:40:48

回答

3

好吧,就像dlamblin提到的那樣,我會從sysinternals獲取ProcExp,FileMon和RegMon,並將它們設置爲監視此過程,然後嘗試啓動它。毫無疑問你會得到的一個產品的一些信息如下:

  • 配置文件它試圖打開/訪問
  • 註冊表項,它在尋找
  • 錯誤級別從過程返回,因爲它退出

如果做不到這一點,搶免費VBDecompiler,並看看有什麼這個東西是它做的啓動代碼,可能導致你的地方....如果你拋出一個異常,他們有一個

:Err 

類型的標籤,該標籤可能只是落空,並退出沒有警告,或什麼...

我用被命名爲「setup_free-VBDecompiler.zip」的VBDecompiler。你可以谷歌它找到它,現在甚至可能有更好的版本。但是,不要指望它反編譯成原始的源代碼,它只能使它成爲「最好的猜測」,但它至少可以幫助你渡過這個障礙......小心,謹慎/尊重任何EULA,可能會阻止ANY逆向工程...

讓我知道這個信息是否有幫助。如果你仍然無法找到任何地方,請聯繫我,然後將.exe發給我,我可以在我的諾曼沙盒中運行它,這可能會給我們更多關於所做功能調用的信息以及應用程序試圖執行的操作...

1

在你的Sub Main你應該確保有一個On Error Goto聲明。這個機會是一個例外正在被拋出並且沒有被捕獲。嘗試在錯誤處理程序中寫入日誌文件並查看所得結果。

3

如果沒有源代碼,您可能沒有多少運氣,但您可以查看this tip on MSDN以自動啓動調試程序。這有點笨拙,但它適用於任何程序。我相信,表現良好的C++應用程序會停在主要位置。它可以成爲早期錯誤的救星。

1

我會說抓住OllyDbg的副本,並查看何時/爲什麼應用程序決定終止。

11

看起來我很喜歡回答這個問題,但試着看看Windows Events日誌。這裏經常有信息可用,比如控件,或者你的程序依賴於沒有找到的DLL。

12

你是說程序啓動但崩潰之前,你可以附上?如果是這樣,請嘗試在調試器下啓動該程序。

在Visual Studio中,您可以通過要做到這一點

  • 文件 - >打開項目
  • 選擇有問題的EXE
  • 按F5
5

您是否嘗試過內運行它一個cmd shell來查看它是否將任何數據返回給控制檯?是否創建了任何日誌文件?

即使因爲程序未啓動而無法附加調試程序,您可以從調試程序中啓動它,OllyDbg將允許您這樣做,就像任何其他值得使用的調試程序一樣。之後,您可以嘗試調試爲什麼代碼不是首先啓動。

9

首先,檢查Dependency Walker它會告訴你是否有任何缺少應用程序需要的DLL。

其次,可執行文件的名稱是什麼?嘗試將其重命名爲MYDUMMY.EXE並再次運行它。有些名稱因爲已經在使用而不起作用。我曾經幫助過一位試圖讓他的第一個應用程序運行兩週的新程序員。它被稱爲DISPLAY.EXE,它已經是一個Windows模塊,所以它不會加載。

1

您可以編寫一個簡單的啓動程序,該程序在dwCreationFlags參數中使用CREATE_SUSPENDED標誌調用CreateProcess()。

它會啓動你調試的程序,它的線程會立即被凍結。然後你可以附上。

主程序可能會等上半分鐘,然後調用ResumeThread()。到那時你將連接調試器。

0

使用WinDBG,您可以使用「打開可執行文件」(或僅執行windbg {可執行文件名稱}在ntdll啓動期間立即連接到調試程序,並在斷點處停止,然後開始運行從那裏(類型「G」)應給出關於問題的一些信息。

0

另一個想法,嘗試在兼容模式(右CLIC,屬性,兼容性選項卡)與Windows 98或Windows 2000

還運行給「每個人」完全訪問該程序創建此文件夾的文件夾

4

我想你請參閱SysInternals過程監控器,具體遵循Case of the Unexplained研討會視頻的一些建議。

在啓動之前開始監視(所有內容),然後停止監視,當您覺得它已經完成錯誤時,應該在幾秒鐘內完成。然後,您將詳細記錄所有流程中發生的所有事件。您可以搜索您的流程名稱,並查找未成功的內容,例如可能沒有權限,或者從系統獲取一些其他抱怨,因爲您沒有向用戶報告,因爲您沒有在通用錯誤陷阱中編寫代碼一個對話框。那麼,也許即使你有它出於某種原因無法顯示對話框。進程監視器日誌會告訴你它。

這就像在一堆日誌中沒有編碼的自動日誌記錄。

0

「不精確浮點結果」可能有時(很少,但發生在我身上)點問題(浮動)數表示 - 當程序嘗試在內部解析某些硬編碼字符串,並假定小數始終期間或sometihing seprated像類似。

嘗試更改系統區域設置或僅使用數字或貨幣格式(小數和千分隔符)。

1

1)如果妳有MS Visual Studio 2005中,它允許如下的命令行運行它:

devenv.exe is the executable(mostly in installation path e.g.(C:\Program Files\Microsoft Visual Studio 8\Common7\IDE) 

運行devenv.exe的--help它給人的命令行選項 我發現你的情況有一些相關的選項:

devenv.exe/debugexe
打開指定的可執行文件爲debugg編輯。命令行的其餘部分將作爲其參數傳遞給此可執行文件 。

希望有所幫助。

-AD

相關問題