Обычно мы все видим базовый формат переполнения буфера, который имеет: -
NOP + шелл-код + return_address
Почему мы не используем,
NOP + return_address + shellcode?
где мы указываем адрес возврата на начало шелл-кода?
Я предполагаю, что это потому, что мы могли бы пытаться записать данные вне сегмента стека, если уязвимость в основном(). Я прав? Если да, то это единственная причина?
О, и да, я не имею в виду другие виды атак, которые используют return-to-libc, ptrace и т. Д .; Я просто хочу знать, почему самая простая атака переполнения буфера демонстрируется первым способом, а не вторым везде.