Как обнаружить разрушение стека в C с помощью Ecplise - PullRequest
0 голосов
/ 04 мая 2020

У меня большой код в C, что при его запуске я получаю ошибку *** stack smashing detected***; <unknown> terminated

Но когда я компилирую этот код с -fno-stack-protector, все работает нормально.

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

Есть ли способ (с отладчиком g cc -ecplise) выяснить, что за строка этого ошибка?

1 Ответ

0 голосов
/ 04 мая 2020

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

Разрушение стека - неопределенное поведение, поэтому что угодно может произойти, в том числе программа, которая работает правильно для некоторых входных данных и с некоторыми комбинациями флагов компиляции.

Есть ли способ (с помощью отладчика g cc -ecplise) выяснить, что строка, которая приводит к этой ошибке?

Вы не можете определить строку , которая вызывает разрушение стека, но вы должны быть в состоянии определить функцию в что это происходит, а затем (если ошибка все еще не очевидна) уменьшите тело этой функции до просто оператора, который вызывает переполнение буфера стека.

Для этого скомпилируйте с -g, запустите программа под GDB (или Eclipse), и используйте команду where в точке cra sh.

...