【问题标题】:Detect madexcept inside an Delphi Application在 Delphi 应用程序中检测 madexcept
【发布时间】:2013-01-20 15:03:51
【问题描述】:

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

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

【问题讨论】:

  • 你在编译可执行文件吗?如果是这样,您肯定知道 madExcept 是否在其中。
  • @DavidHeffernan 可以想象的情况可能是“需要”知道的组件的分布......
  • 可执行文件在客户处,我们使用 madshi 编译,但 madshi 不会在客户 PC 的访问违规或线程冻结时弹出。在不再次交换可执行文件的情况下,我们想确认我们的代码符合我们的规范,包括 madshi 调试工具。
  • 如果您有一个可重复的构建过程,您可以自己重新生成可执行文件并使用它。

标签: delphi madexcept


【解决方案1】:

如果您在 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 使用了哪些选项。例如,可能有一个异常过滤器设置来过滤访问冲突异常,或者一个不会检查冻结线程等的设置......

【讨论】:

  • ResHacker 或 XNResourceEditor 或 dumpin 是这里的工具。不需要编写代码来解决这个问题。
  • @DavidHeffernan,我认为 OP 以编程方式想要这个“有没有一种简单的方法可以在我的应用程序中添加几行代码......”我的答案是。
  • 是的,问题没有这么说,但它在 cmets 中。叹息。
  • 鉴于接受,我想我误解了这个问题。我以为弗朗茨是在进行一次性诊断。
【解决方案2】:

您可以对文本“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 代码编译到您的程序中。您将不知道它是否实际上处于活动状态。

【讨论】:

    【解决方案3】:

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

    {$IFDEF madExcept}
      ....
    {$ENDIF}
    

    【讨论】:

    • 然后您可以在此条件内为变量赋值,例如IsMadExcept。 [+1]
    • +1 来自我。如果您想在自己的应用程序中测试 madExcept,这比我建议的 FindResource 更好。
    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 2021-07-31
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多