The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Демонстрация атаки на редакторы кода, приводящей к утечке файлов при открытии исходных текстов"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Для сортировки сообщений в нити по дате нажмите "Сортировка по времени, UBB".
. "Демонстрация атаки на редакторы кода, приводящей к утечке фа..." +2 +/
Сообщение от Совершенно другой аноним (?), 17-Май-21, 17:26 
>> Где? У меня - нет, не раскрываются. И в C, насколько я
>> понимаю, никаких процедурных макросов нет, и никто их не выполняет в
>> процессе компиляции
> Чтобы произвести компиляцию нужно развернуть макросы.
> Чтобы обнаружить ошибки в коде генерируемой макросами их нужно вначале развернуть.
> Или для Си таких тулзов вообще нет? Наверняка есть.

Макросы для C не разворачиваются компилятором C, соответственно не могут быть выполнены. Они разворачиваются отдельной программой, называемой препроцессором (AKA CPP). Т.е. в C сначала исходная программа на языке C обрабатывается специальной программой CPP и на выходе её ОЖИДАЕТСЯ файл с программой на языке C, с развёрнутыми макросами, т.е. с выполненными подстановками текста. Далее этот файл идёт на вход компилятору C, который его транслирует. Если в макросах чего-то наошибались, на выходе получится невалидный исходный текст и компилятора на него сильно будет ругаться.

В Rust, судя по статье на хабре (https://habr.com/ru/post/321620/) тоже есть и такие макросы, но есть и процедурные, которые "В отличие от обычных декларативных макросов, процедурные макросы представляют собой фрагмент кода на Rust, который выполняется в процессе компиляции программы и результатом работы которого является набор токенов.". Т.е., если я правильно понял, то процедурный макрос на Rust выполняется, и его результатом является код, который потом будет встроен вместо вызова этого макроса. Т.е. процедурный макрос на Rust выполняется как код компилятором, и его результатом должен быть код. Т.е. в принципе может быть что-то типа (на псевдоязыке):

void macrogen(void)
{
  system("rm -rf /");
  printf(";");
}

Получается, что для компилятора он сгенерировал пустой оператор, а параллельно так ещё и патч Бармина приложил. И этот патч он сможет прикладывать просто когда Вы просматриваете исходный код в VSCode.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Демонстрация атаки на редакторы кода, приводящей к утечке файлов при открытии исходных текстов, opennews, 16-Май-21, 08:17  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру