首页 > 解决方案 > 将程序宏代码或堆栈值编译成可执行文件?

问题描述

我正在编写程序宏。假设我有一个宏,可以用它的哈希值替换代码中的每个密码实例。我不希望它在运行时包含在可执行文件或内存中。

编译时使用的代码和堆栈是否添加到二进制文件中?我很确定他们不是,但我找不到明确的答案。

标签: rustmacros

解决方案


一般的问题是“编译环境中的内存是否有可能最终出现在最终的可执行文件中?”。

实际的答案是否定的,特别是与编译器的堆栈帧或在 proc-macro 中使用的内存(在单独的进程中运行)有关。

就安全性而言,答案肯定是肯定的。一方面,编译器不保证它不会在最终的可执行文件中包含其通用环境的一部分,例如,人们对他们的用户名被包含在可执行文件中感到惊讶,因为依赖项会生成引用源的错误消息错误起源的文件 ( error at /home/myusername/foo/src/...)。其次,编译器无法控制操作系统在做什么,所以它自己的部分行为(同样,关于安全保证)是在那里实现定义的。

因此,如果您绝对必须保证您的令牌不包含在最终的可执行文件中,请在首先调用编译器进程之前对其进行哈希处理。


推荐阅读