Если ассемблер выводит ошибку сегментирования, можно попробовать следующее:
- Проверить, что возвращаемое значение от функции не находится в стеке. 1 Если добавить значение в стек, команда ret примет это значение в качестве адреса для перехода, вызывая ошибку. 1 Нужно выбрать регистр для хранения возвращаемого значения (обычно EAX в архитектуре IA32). 1
- Проверить управление стеком. 1 Если инструкция push вызывает ошибку, скорее всего, где-то в программе неправильно работает управление стеком и заканчивается место в стеке. 1
- Использовать отладчик. 2 Например, запустить код в gdb и при возникновении ошибки сегментации ввести команду x/4i $eip, которая выведет на экран инструкцию, вызвавшую ошибку, и ещё три инструкции. 2
- Установить программу valgrind и запустить под ней приложение. 2
Если самостоятельно найти и исправить ошибку не удаётся, рекомендуется обратиться за помощью к специалисту.