Скомпилировать код процедурного макроса или значения стека в исполняемый файл?

#rust #macros

#Ржавчина #макросы

Вопрос:

Я пишу процедурные макросы. Допустим, у меня есть макрос для замены каждого экземпляра моего пароля в моем коде его хэшем. Я не хочу, чтобы он включался в исполняемый файл или в память во время выполнения.

Добавляются ли код и стек, используемые во время компиляции, в двоичный файл? Я почти уверен, что это не так, но я не смог найти явного ответа.

Ответ №1:

Общий вопрос: «Существует ли вероятность того, что память из среды компиляции окажется в конечном исполняемом файле?».

Практический ответ — нет, особенно связанный с фреймами стека компилятора или памятью, которые использовались в proc-макросе (который выполняется в отдельном процессе).

Ответ, что касается безопасности, определенно да. Во-первых, компилятор не дает никаких гарантий, что он не включит часть своей общей среды в конечный исполняемый файл, и, например, люди были удивлены, что их имя пользователя включается в исполняемый файл, потому что зависимость генерирует сообщения об ошибках, которые ссылаются на исходный файл, в котором возникла ошибка ( error at /home/myusername/foo/src/... ) . Во-вторых, компилятор не может контролировать, что делает операционная система, поэтому часть его собственного поведения (опять же, в отношении гарантий безопасности) определяется реализацией.

Итак, если вам абсолютно необходимо гарантировать, что ваш токен не включен в конечный исполняемый файл, хэшируйте его, прежде чем даже вызывать процесс компилятора.