2

exeファイルのみを分析することにより、デルファイアプリケーション内でmadexceptが使用されているかどうかを検出できますか?

私のアプリケーションに数行のコードを追加し、madshi madexcept が使用されているかどうかを最終的な exe ファイルのユーザーに通知する簡単な方法はありますか?

4

3 に答える 3

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が使用されるかを通知しないことに注意してください。たとえば、アクセス違反の例外をフィルター処理する例外フィルター セットや、凍結されたスレッドをチェックしない設定などがあります。

于 2013-01-20T18:10:54.043 に答える
5

テキスト「madexcept」のプレーンテキスト検索を実行できます。私が知っている最も簡単な方法は、コマンド ライン ユーティリティを使用することです。次のように文字列と grep ユーティリティを組み合わせます。

C:\mydir>strings MyApp.exe | grep -i madeexcept
MadException
MadExceptionT
madExcept
        madExcept
U9v;1 madExcept5
狂った例外
        madExcept
        madException1
c madExceptL
c madExcept
c madExcept
c madExceptL
c madExcept
c madExcept
        madExcept
c madExceptH
この方法では、madExcept はスレッド フックをインストールできません。
.........

私は個人的にこれらの不可欠なユーティリティのソースとしてGnuWin32を使用しています。

コマンド ラインが苦手な方は、Process Explorer を使用してください。実行可能ファイルを実行してから、Process Explorer を実行します。プロセスを見つけてダブルクリックします。Stringsという名前のページを含む Process Explorer プロパティ ダイアログが表示されます。そのページを選択し、保存ボタンをクリックします。これで、検索可能な実行可能ファイルのすべての文字列を含むテキスト ファイルが作成されました。

これだけで、madExcept コードをプログラムにコンパイルしたことがわかります。実際にアクティブかどうかはわかりません。

于 2013-01-20T16:51:45.127 に答える
4

madExceptを有効にしてプロジェクトオプションを調べると、たとえばプログラムで実行できる場所であればどこでも、定義madExceptが使用されていることがわかると思います。

{$IFDEF madExcept}
  ....
{$ENDIF}
于 2013-01-21T13:33:49.803 に答える