14

我正在编写一个类来处理我的可执行文件中的安全性(检查序列、试用日期检查等)。编译可执行文件后(即使在发布版本中,关闭所有调试和 RTTI 生成),当我在记事本中打开它并在原始数据中搜索方法名称时,我可以看到组装我的类的所有方法的名称. 代码库中的任何类中都没有已发布的成员。

这对保护不利。有没有办法告诉 Delphi 不要在可执行文件中存储方法名称?如果不需要 RTTI 且没有 COM 爆炸,为什么还要存储它们?有没有控制这个的编译器选项?

目标可执行文件中任何类的任何方法都可能以文本形式存储在可执行文件中。显然,这是由于 Delphi 2010 中所有类默认打开扩展 RTTI 造成的。

4

4 回答 4

15

如果您询问 Delphi 2010 中的扩展 RTTI,可以通过以下方式将其关闭

{$RTTI 显式方法([]) 属性([]) 字段([])}

另见docwiki

于 2010-01-30T16:13:30.773 回答
6

同样剥离重定位,在项目的 dpr 文件中占用以下内容:

{$IFDEF RELEASE}
  // Leave out Relocation Table in Release version
  {$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}
{$ENDIF RELEASE}
于 2010-01-30T18:20:19.737 回答
6

...并且不要忘记关闭“td 32 debug info”(在旧版本中)或在以后的链接器选项卡中关闭调试信息。

于 2010-01-30T18:37:32.450 回答
-1

您可能会看到作为资源的表单定义(例如项目的 DFM 文件的二进制表示)。

如果您不想显示这些(对于串行信息屏幕等),您应该“在代码中”创建这些表单。例如,创建一个 TForm,在其上放置一个 TButton 和 TEdit,在代码中附加事件处理程序。

要方便地做到这一点:从表单开始并创建 DFM。查看表单时,从上下文菜单中选择以文本形式查看,您将知道应该将哪些内容复制到代码中。并确保不要将任何 varaiablerefernces 放在 de published 下(始终将 public/protected/private 作为类定义中的第一行。

于 2010-01-30T16:28:41.570 回答