gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:54:37 30 4
gpt4 key购买 nike

我打开 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 中。

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

最佳答案

我想说的是 not possible.

<小时/>

直接实验观察的结论

尝试关闭我们能找到的每个选项:

编译

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

链接

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

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

enter image description here

关于delphi - 防止枚举类型数组的调试信息出现在 EXE 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59018236/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com