2013-01-20 51 views
2

我可以通過僅分析exe文件來檢測是否在delphi應用程序中使用了makexcept?檢測德爾福應用程序中的makexcept

是否存在被添加的幾行代碼,以我的應用程序,或告知最終的exe文件,用戶如果madshi madexcept已使用未

+0

你編譯可執行文件?如果確定你知道madExcept是否在那裏。 –

+0

@DavidHeffernan @DavidHeffernan可想象的情況可能是「需要」知道的組件的分佈... – bummi

+0

可執行文件在客戶端,我們用madshi編譯,但是madshi不會在客戶端PC上的訪問衝突或凍結線程中彈出。如果不再交換可執行文件,我們想確認我們的代碼是否符合我們的規範,包括madshi調試工具。 – Franz

回答

12

如果在Delphi應用程序中使用madexcept,那麼該可執行文件中應該有一個資源條目:MAD->EXCEPT

要測試的外部應用程序:

var 
    h: HMODULE; 

    h := LoadLibraryEx('c:\foo\bar.exe', 0, LOAD_LIBRARY_AS_DATAFILE); 
    if h <> 0 then 
    begin 
    if FindResource(h, 'EXCEPT', 'MAD') <> 0 then 
     ShowMessage('madexcept Found!'); 
    FreeLibrary(h); 
    end; 

要測試裏面自己的應用程序:

if FindResource(HInstance, 'EXCEPT', 'MAD') <> 0 then 
    ShowMessage('madexcept Found!'); 

然而要注意WHIS不會告訴你什麼選擇madexcept用途。例如可能有一個異常過濾器設置爲過濾訪問衝突異常,或者不會檢查凍結線程等的設置...

+1

ResHacker或XNResourceEditor或dumpin是這裏的工具。編寫代碼並不是解決這個問題所需要的。 –

+4

@DavidHeffernan,我以爲OP想要通過編程的方式「通過向我的應用程序添加幾行代碼來實現這一簡單方法......」我的答案。 – kobik

+0

是的,這個問題沒有說,但它在評論中。嘆。 –

5

一個簡單的方法可以做到文本純文本搜索「madexcept 」。我所知道的最簡單的方法是使用命令行工具。我將結合琴絃和grep工具是這樣的:

 
C:\mydir>strings MyApp.exe | grep -i madexcept 
MadException 
MadExceptionT 
madExcept 
     madExcept 
U9v;1 madExcept5 
A  madExcept 
     madExcept 
     madExcept1 
c  madExceptL 
c  madExcept 
c  madExcept 
c  madExceptL 
c  madExcept 
c  madExcept 
     madExcept 
c  madExceptH 
This way madExcept can't install the thread hooks. 
......... 

我個人使用GnuWin32作爲我的源代碼,這些不可缺少的工具。

如果您不是某個人的命令行類型,請使用Process Explorer。運行可執行文件,然後運行Process Explorer。找到過程並雙擊它。打開Process Explorer屬性對話框,其中包含一個名爲Strings的頁面。選擇該頁面並點擊保存按鈕。現在,您有一個文本文件,其中包含可執行文件中可以搜索的所有字符串。

所有這些都會告訴你,你將madExcept代碼編譯到你的程序中。你不知道它是否真的活躍。

2

如果您查看啓用madExcept的項目選項,我相信您會看到定義madExcept使用,例如在程序中任何地方,你可以這樣做:

{$IFDEF madExcept} 
    .... 
{$ENDIF} 
+0

然後,您可以將值分配給此條件內的變量,如「IsMadExcept」。 [+1] – TLama

+0

也是我的+1。如果你想在你自己的應用程序中測試madExcept,這比我建議的FindResource更好。 – kobik