将过程宏代码或堆栈值编译成可执行文件?

Compile procedural macro code or stack values into executable?

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

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

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

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

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

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