10

非常に単純な状況です。私は Delphi 2007 でアプリケーションに取り組んでいます。このアプリケーションは、多くの場合「リリース」としてコンパイルされますが、デバッガの下で実行されます。また、回帰テストのために、SilkTest の下で実行されることもあります。これはとても楽しいですが、私は何か特別なことをしたいです...

アプリケーションがデバッガー/回帰テスター内で実行されているかどうかを検出したいのですが、その場合は、どのツールが使用されているかをアプリケーションに認識させたいのです! (したがって、アプリケーションがクラッシュしたときに、この情報をエラー レポートで報告できます。)

提案、解決策はありますか?

4

4 に答える 4

11

アプリケーションを起動した親プロセスを確認できます。//を使用して、アプリケーション PIDの親 PID (または) を取得しCreateToolhelp32SnapshotますProcess32First。次に、親 PID のファイル名を取得して、チェックしたいアプリケーション (SilkTest など) と比較します。Process32NextPROCESSENTRY32.th32ParentProcessIDTProcessEntry32.th32ParentProcessID

コードの使用法については、この記事を確認してください。

と に加えてIsDebuggerPresentCheckRemoteDebuggerPresentクエリを実行することもできますPEB.BeingDebugged(PEB はプロセス環境ブロックです。PEB を取得するには、スレッド環境ブロックである TEB をクエリする必要があります)。

于 2009-09-18T10:11:45.507 に答える
4

あなたはおそらくIsDebuggerPresent関数を探しています。

于 2009-09-18T08:45:05.863 に答える
1

SilkTestを検出するには、その存在を検出するためにSilkTestによってのみ使用されるDLLへの接続を試みることができます。たとえば、Open Agentがプロセスにアタッチされている場合、Win32HookDll_x86.dllまたは存在する場合(名前は、 ProcessExplorerWin32HookDll_amd64.dllなどのツールを使用して簡単に見つけることができます)。

于 2011-09-20T08:19:35.777 に答える
-1

あなたもできる

if DebugHook <> 0 then ...
于 2009-09-18T09:38:52.893 に答える