#rust #macros
#Ржавчина #макросы
Вопрос:
Я пишу процедурные макросы. Допустим, у меня есть макрос для замены каждого экземпляра моего пароля в моем коде его хэшем. Я не хочу, чтобы он включался в исполняемый файл или в память во время выполнения.
Добавляются ли код и стек, используемые во время компиляции, в двоичный файл? Я почти уверен, что это не так, но я не смог найти явного ответа.
Ответ №1:
Общий вопрос: «Существует ли вероятность того, что память из среды компиляции окажется в конечном исполняемом файле?».
Практический ответ — нет, особенно связанный с фреймами стека компилятора или памятью, которые использовались в proc-макросе (который выполняется в отдельном процессе).
Ответ, что касается безопасности, определенно да. Во-первых, компилятор не дает никаких гарантий, что он не включит часть своей общей среды в конечный исполняемый файл, и, например, люди были удивлены, что их имя пользователя включается в исполняемый файл, потому что зависимость генерирует сообщения об ошибках, которые ссылаются на исходный файл, в котором возникла ошибка ( error at /home/myusername/foo/src/...
) . Во-вторых, компилятор не может контролировать, что делает операционная система, поэтому часть его собственного поведения (опять же, в отношении гарантий безопасности) определяется реализацией.
Итак, если вам абсолютно необходимо гарантировать, что ваш токен не включен в конечный исполняемый файл, хэшируйте его, прежде чем даже вызывать процесс компилятора.