The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Переполнение буфера в Toxcore, эксплуатируемое через отправку UDP-пакета, opennews (?), 15-Дек-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


100. "Переполнение буфера в Toxcore, эксплуатируемое через отправк..."  +1 +/
Сообщение от Аноним (99), 16-Дек-21, 13:08 
А если собирать с разными оптимизациями, то компилятор не мог вычислить значение макроса и подставить в код уже его? И результат был бы другим.
Ответить | Правка | Наверх | Cообщить модератору

114. "Переполнение буфера в Toxcore, эксплуатируемое через отправк..."  +1 +/
Сообщение от Аноним (158), 16-Дек-21, 14:29 
Компиляция в Си происходит как минимум четырьмя отдельными программами.

1. Макропроцессор. Он изменяет исходный код ТОЛЬКО с помощью своих команд. Он НЕ смотрит в сами исходники и ему в целом по барабану на всё, что не #... На его работу можно посмотреть с помощью флага -E

2. Компилятор. Он обрабатывает уже отредактированный макропроцессором код. Он производит все оптимизации и превращает Си в ассемблерный код, НО ЕЩЁ НЕ В БИНАРЬ. На его работу можно посмотреть флагом -S

3. Ассемблер. Он собирает всё ещё читабельный ассемблерный код в понятный для процессора бинарь. Это ещё не готовая программа, поскольку в бинаре нету всяких данных, даже названия функций к которым делается call не определены, но это уже оптимизированный код, который имеет смысл хранить отдельно, чтобы не заниматься каждый раз компиляцией всего проекта заного. Флаг -c

4. Линковщик. Он превращает все объекты в ИСПОЛНЯЕМЫЙ файл (для линукса и макоси ELF). По сути он собирает из всех .o файлов архив и подставляет всю метадату: откуда брать функцию read, какие библиотеки подгружать из /usr/lib, и т.д. Само собой, этот файл будет работать ТОЛЬКО на системе, которая во первых умеет читать ELF (например, уже рантайм линкером ld-linux-x86-64), и во вторых если после копипаста файлика все пути до библиотек и их версии совпадут (сверяются тупо строки внутри ELF и библиотек, гляньте objdump). Можно собирать статичные файлики, т.е. те, которые весь код берут с собой и в рантайм линковке не нуждаются, но и весить они будут как ваш код + все библиотеки, которые использовались (причём рекурсивно, библиотеки тоже могут использовать библиотеки), в сумме.

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

115. "Переполнение буфера в Toxcore, эксплуатируемое через отправк..."  +1 +/
Сообщение от Аноним (158), 16-Дек-21, 14:33 
да, ответ на вопрос так и не написал. Макросы просто копипастятся в то место, где вы использовали своё define слово. Т.е. для компилятора один и тот же ABC макрос в двух разных местах будет двумя разными участками кода, БУКВАЛЬНО
Ответить | Правка | Наверх | Cообщить модератору

141. "Переполнение буфера в Toxcore, эксплуатируемое через отправк..."  +/
Сообщение от n00by (ok), 17-Дек-21, 08:01 
> Компиляция в Си происходит как минимум четырьмя отдельными программами.

Стандарт формально определяет раздельные фазы трансляции (макросы разворачиваются на 4-й), но не обязывает реализовать их в виде отдельных программ (Implementations shall behave as if these separate phases occur, even though many are typically folded together in practice).

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

185. "Переполнение буфера в Toxcore, эксплуатируемое через отправк..."  +/
Сообщение от Аноним (-), 23-Дек-21, 09:41 
Это вообще препроцессор разбирает. И на приоритете операций случился облом. Задумка была правильная, а вот правильно использовать макросы они научились получив CVE. Эффективный стимул RTFM получился.
Ответить | Правка | К родителю #100 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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