我打开Delphi IDE并创建一个新项目。这是该应用程序的全部代码:
program EnumSymbolsInExeTest1;
type
tMyEnum = ( A );
begin
end.
Run Code Online (Sandbox Code Playgroud)
我生成了应用程序,然后在EXE中搜索“ tMyEnum”。找到了。这并不奇怪,因为我在链接器选项中将“调试信息”设置为“开”。
我关闭调试信息。我重建。我再次搜索EXE,现在没有提及tMyEnum。到目前为止,一切都如预期。
然后,我更改代码。我添加一个变量。
program EnumSymbolsInExeTest1;
type
tMyEnum = ( A );
var
Z : tMyEnum;
begin
end.
Run Code Online (Sandbox Code Playgroud)
我重建。仍然没有惊喜。我得到一个未使用变量的提示,而EXE仍然没有提及TMyEnum。
然后,我进行另一个小更改:
type
tMyEnum = ( A );
var
Z : array of tMyEnum;
begin
end.
Run Code Online (Sandbox Code Playgroud)
我将变量更改为数组。我重建。我搜索EXE,发现tMyEnumEXE文件中现在出现“ ”。
我的问题是:为什么?
我该如何阻止它?我不希望任何内部标识符出现在发送给客户的可执行文件中。
我正在使用Delphi 10.2
为了响应David Heffernan,我添加了这些编译器指令。
program EnumSymbolsInExeTest1;
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
type
tMyEnum = ( A );
var
Z : array of tMyEnum;
begin
end.
Run Code Online (Sandbox Code Playgroud)
我的EXE仍然包含“ tMyEnum”。
我有新线索!我将数组从动态更改为静态。
program EnumSymbolsInExeTest1;
type
tMyEnum = ( A );
var
Z : array [1..10] of tMyEnum;
begin
end.
Run Code Online (Sandbox Code Playgroud)
现在,标识符不再出现在EXE中。
因此,类型的声明不会触发它,添加该类型的变量不会触发它,添加静态数组不会触发它,但是使它成为动态数组会触发它。
我想说这是不可能的。
直接实验观察得出的结论
尝试关闭我们能找到的每个选项:
编译
链接
并且该符号仍然出现在.text最终PE模块的部分中。
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |