在Delphi应用程序中检测madexcept

Fra*_*anz 2 delphi madexcept

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

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

kob*_*bik 12

如果您使用madexceptDelphi应用程序,那么应该有一个资源条目: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;
Run Code Online (Sandbox Code Playgroud)

要测试自己的应用程序:

if FindResource(HInstance, 'EXCEPT', 'MAD') <> 0 then 
  ShowMessage('madexcept Found!');
Run Code Online (Sandbox Code Playgroud)

但请注意,它不会告诉您哪些选项madexcept使用.例如,可能有一个异常过滤器集来过滤访问冲突异常,或者一个设置不会检查冻结的线程等...

  • @DavidHeffernan,我认为OP想要以编程方式进行此操作"通过向我的应用程序添加几行代码,有一种简单的方法......"我回答道. (4认同)

Dav*_*nan 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代码编译到你的程序中.你不会知道它是否真的有效.