*** stack smashing detected ***
ошибка возникает, когда, как следует из названия, вы sma sh стек , что означает, что у вас переполнение буфера и канарейка перезаписывается другим значением , Это механизм безопасности, реализованный gcc / g ++ для предотвращения эксплойтов переполнения буфера с использованием -fstack-protector
.
. Чтобы избежать этой ошибки, отключите fstack-protector
в g cc при компиляции кода с использованием
* 1011. *
Редактировать 1
Однако отключение защиты стека устранит эту ошибку, но вы можете получить segmentation fault
в результате перезаписи стека.
Если это компьютер назначение безопасности, когда вы работаете над эксплойтом переполнения буфера, тогда вам нужно выяснить, как обойти этот механизм безопасности, если вы не знакомы с ним, то каким-то образом вы переполняете буфер и, не глядя на код, я не могу комментировать, где именно проблема заключается в том, что
, чтобы увидеть, появляются ли данные из вектора 1 в векторе 2 , это действительно похоже на тип переполнения буфера, когда требуется перезаписать содержимое массивов друг от друга. Тот факт, что эта ошибка не является последовательной, потому что иногда канарейка не перезаписывается (точный запуск программы) или перезаписывается тем же самым точным значением, а иногда канарейка перезаписывается другим значением, приводящим к этой ошибке.
You необходимо настроить компилятор, чтобы облегчить переполнение буфера.
Edit 2
Поведение вашей программы является случайным, поскольку, вероятно, вы не отключили ASLR (рандомизация расположения адресного пространства) ). Когда вы компилируете свою программу, ваш компилятор gcc / g ++ оптимизирует ваш исполняемый файл для механизмов безопасности, чтобы предотвратить эксплойты переполнения буфера.
Рандомизация размещения адресного пространства (ASLR) - это метод компьютерной безопасности, используемый для предотвращения эксплуатации повреждения памяти уязвимости. Чтобы предотвратить надежный переход злоумышленника, например, к определенной эксплуатируемой функции в памяти, ASLR случайным образом размещает позиции адресного пространства ключевых областей данных процесса, включая базу исполняемого файла и позиции стека, кучу и библиотеки.
Это означает, что распределение адресного пространства является случайным, и байты между вашими векторами каждый раз различаются. Иногда переполненный буфер не доходит до канарейки, а иногда и доходит. Чтобы получить согласованное поведение каждый раз, вам также необходимо отключить ASLR. Поддержка ASLR обеспечивается вашей ОС. Чтобы отключить ASLR, на linux его отключают, установив randomize_va_space
на 0. Этого можно достичь с помощью
echo 0 > /proc/sys/kernel/randomize_va_space