Задать вопрос
@Sasha_88

Покажите на ассемблере как выглядит защита от переполнения буфера?

Может кто-нибудь показать, используя x86-64 ассемблер, что делает компилятор языка с проверкой на выход за границу массива? И если этой проверки нет. Я правильно понимаю там одна, две инструкции лишние будут в коде, чтобы проверить и вызвать исключение, панику?
Спасибо
  • Вопрос задан
  • 8605 просмотров
Подписаться 3 Простой 6 комментариев
Решения вопроса 1
Ternick
@Ternick
Есть такая штука Stack Canary. Она отвечает за защиту от переполнения буфера, вполне возможно, что это не единственный механизм, но один из основных, которые отвечают за это.

Есть аргументы компилятора, которые убирают защиту от переполнения и соответственно добавив их можно посмотреть и сравнить бинарники с защитой и без.

В принципе вопрос особо ничего не стоит и гуглиться по первым ссылкам буквально, но допустим.

От себя порекомендую видео S0ER на эту тему
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Защита от переполнения буфера - это не пара магических инструкций, а проверка при работе с массивами или выделенными участками памяти (впрочем, для C/C++/ASM это примерно одно и то же), что указатель не выходит за границу выделенной памяти. Реализовано может быть самыми разными способами. Например, в C есть функция strncpy, которая делает всё то же самое, что strcpy, только проверяя, что копируется не более заданного количества байтов. Если вы правильно передали в неё размер буфера, то переполнения при операции не произойдёт.
Так что на языках низкого уровня только проверки, проверки и ещё раз проверки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы