2

我可以仅通过分析 exe 文件来检测 delphi 应用程序中是否使用了 madexcept 吗?

有没有一种简单的方法,通过在我的应用程序中添加几行代码并通知最终的 exe 文件用户是否使用了 madshi madexcept

4

3 回答 3

12

如果您madexcept与 Delphi 应用程序一起使用,则应该有一个资源条目: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>字符串 MyApp.exe | grep -i madexcept
疯狂异常
疯狂异常
疯狂除外
        疯狂除外
U9v;1 madExcept5
一个疯子
        疯狂除外
        疯狂除外1
c madExceptionL
c madExcept
c madExcept
c madExceptionL
c madExcept
c madExcept
        疯狂除外
c madExceptH
这种方式 madExcept 无法安装线钩。
…………

我个人使用GnuWin32作为这些必不可少的实用程序的来源。

如果您不是命令行类型的人,请使用 Process Explorer。运行可执行文件,然后运行 ​​Process Explorer。找到进程并双击它。将打开 Process Explorer 属性对话框,其中包含一个名为Strings的页面。选择该页面并单击保存按钮。现在您有了一个包含可执行文件中所有字符串的文本文件,您可以在其中进行搜索。

所有这一切都会告诉您,您将 madExcept 代码编译到您的程序中。您将不知道它是否实际上处于活动状态。

于 2013-01-20T16:51:45.127 回答
4

如果您查看启用了 madExcept 的项目选项,我相信您会看到使用的定义madExcept,例如,在您可以执行的任何地方的程序中:

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