繁体   English   中英

防止枚举类型数组的调试信息出现在 EXE 中

[英]Prevent debug information for array of enumerated type from appearing in EXE

我打开 Delphi IDE 并创建一个新项目。 这是应用程序的完整代码:

program EnumSymbolsInExeTest1;

type
  tMyEnum = ( A );

begin
end.

我构建了应用程序,然后在 EXE 中搜索“ tMyEnum ”。 找到了。 这并不奇怪,因为我在链接器选项中设置了调试信息。

我关闭调试信息。 我重建。 我再次搜索 EXE,现在没有提到tMyEnum 到目前为止,一切都如预期的那样。

然后我更改代码。 我添加了一个变量。

program EnumSymbolsInExeTest1;

type
  tMyEnum = ( A );

var
  Z : tMyEnum;

begin
end.

我重建。 仍然没有惊喜。 我得到一个未使用变量的提示,但 EXE 仍然没有提到TMyEnum

然后我再做一个小改动:

type
  tMyEnum = ( A );

var
  Z : array of tMyEnum;

begin
end.

我将变量更改为数组。 我重建。 我搜索了 EXE,发现“ tMyEnum ”现在出现在 EXE 文件中。

我的问题是:为什么?

我怎样才能阻止它? 我不希望我的任何内部标识符出现在我发送给客户的可执行文件中。

我正在使用 Delphi 10.2

为了回应 David Heffernan,我添加了这些编译器指令。

program EnumSymbolsInExeTest1;

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

type
  tMyEnum = ( A );

var
  Z : array of tMyEnum;

begin
end.

我的 EXE 仍然包含“tMyEnum”。

我有新线索! 我将数组从动态更改为静态。

program EnumSymbolsInExeTest1;

type
  tMyEnum = ( A );

var
  Z : array [1..10] of tMyEnum;

begin
end.

现在标识符不再出现在 EXE 中。

因此类型的声明不会触发它,添加该类型的变量不会触发它,添加静态数组不会触发它,但使其成为动态数组会。

我会说这是不可能的。


直接实验观察的结论

尝试关闭我们可以找到的所有选项:

编译

  • 代码内联控制:关闭
  • 发出运行时类型信息:false
  • 优化:真
  • 断言:错误
  • 调试信息:无调试信息
  • 局部符号:false
  • 符号参考信息:无
  • 使用调试 .dcus: false
  • 使用导入的数据引用: false
  • I/O 检查: false
  • 溢出检查:false
  • 范围检查:false
  • 可赋值的类型常量:false
  • 完整的布尔评估:false
  • 扩展语法: false
  • 默认长字符串: false
  • 打开参数: false
  • 严格的 var 字符串: false
  • 输入@运算符:false

链接

  • 调试信息:false
  • 包括远程调试符号:false
  • 地图文件:关闭
  • 输出资源字符串 .drc 文件:false

并且该符号仍然出现在最终 PE 模块的.text部分中。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM