我可以仅通过分析 exe 文件来检测 delphi 应用程序中是否使用了 madexcept 吗?
有没有一种简单的方法,通过在我的应用程序中添加几行代码并通知最终的 exe 文件用户是否使用了 madshi madexcept
如果您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
使用什么选项。例如,可能有一个异常过滤器设置来过滤访问冲突异常,或者一个不会检查冻结线程等的设置......
您可以对文本“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 代码编译到您的程序中。您将不知道它是否实际上处于活动状态。
如果您查看启用了 madExcept 的项目选项,我相信您会看到使用的定义madExcept,例如,在您可以执行的任何地方的程序中:
{$IFDEF madExcept}
....
{$ENDIF}