繁体   English   中英

Delphi 在不使用资源的情况下将 DLL 嵌入到可执行文件中

[英]Delphi embed DLL into executable without use of resources

我想要做到这一点: 将 DLL 嵌入 EXE但不使用资源(DLL 二进制文件不应在资源查看器中可见,但应隐藏在可执行代码中)。 我试图将文件转换为字符串文字,但文件太大,我在尝试编译它时只会出现内存不足或堆栈溢出异常:

const cFileSize = 2424564;
const cFileBlock =
'30820274020100300D06092A864886F70D010101'+
'05000482025E3082025A02010002818100D713B2'+
...
'BF1F8167F517D3945C27CABCB1E7D7C4092336B9';

你有什么建议:

a) 尝试一些方法来满足编译器内存限制(例如拆分为更多包含文件等)?

b) 将 DLL 转换为目标文件并将其与应用程序链接(哪个工具?)

c) 其他方式?

谢谢

我可以确认上述评论中提出的解决方案有效:

const cFileBlock: array[0..2424564-1] of byte = ($30, $82, ..., $B9);

编译器不再抱怨堆栈溢出和内存不足错误。

但是我无论如何都不会使用这个解决方案,因为防病毒软件可能会发出虚假的威胁警告,请再次查看上面的评论。

谢谢大家的帮助。

为什么不只使用 CRC 校验和?

如果您的目标是确保 DLL 没有以任何方式被篡改,您可以在程序中存储一个 CRC,该 CRC 是根据已知的未篡改 DLL 计算得出的。 然后,只需读入 DLL 并将该 DLL 的计算校验和与您存储的内容进行比较。

需要注意的一件事是,如果生成 DLL 的个人/公司进行了更改,则会产生不同的校验和,并且需要将此更新的校验和存储在您的应用程序中,否则程序将“相信”DLL 已被如果使用更新的版本,则被篡改。

暂无
暂无

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

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