我正在写一个类来处理我的可执行文件中的安全性(检查连续出版物,试用日期检查等)。编译可执行文件后(即使在Release版本中,所有调试和RTTI生成都关闭),当我在NotePad中打开它并在原始数据中搜索方法名称时,我可以看到组装我的类的方法的所有名称。代码库中的任何类都没有已发布的成员。
这对保护不利。有没有办法告诉Delphi不要在可执行文件中存储方法名称?如果不需要RTTI且没有COM爆炸,为什么要存储它们呢?是否有任何编译器选项控制它?
可能是目标可执行文件中ANY类的任何方法以文本形式存储在可执行文件中。显然,这是由默认情况下为Delphi 2010中的所有类启用的扩展RTTI引起的。
答案 0 :(得分:15)
答案 1 :(得分:6)
同样剥离重定位,在项目的dpr文件中占用以下内容:
{$IFDEF RELEASE}
// Leave out Relocation Table in Release version
{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}
{$ENDIF RELEASE}
答案 2 :(得分:6)
...并且不要忘记在以后的链接器选项卡中关闭“td 32 debug info”(在旧版本中)或调试信息。
答案 3 :(得分:-1)
您可能会看到的是您的表单定义作为资源(例如项目的DFM文件的二进制表示)。
如果您不想显示这些(对于序列信息屏幕等),您应该“在代码中”创建这些表单。例如,创建一个TForm,将TButton和TEdit放在其上,在代码中附加事件处理程序。
要以一种方式执行此操作:从表单开始并创建DFM。在查看表单时,从上下文菜单中选择“查看为文本”,您将知道应该将哪些内容复制到代码中。并确保不要在de published下放置任何可变参数(总是将public / protected / private作为类定义中的第一行。