В ассемблере:
.globl _test
_test:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
pushl %eax
call printf
popl %ebp
ret
Звонок с c
main()
{
_test("Hello");
}
Компиляция:
gcc -m32 -o test test.c test.s
Этот код иногда дает мне недопустимые инструкции, а в другом случае сегментирует ошибку.
В gdc я всегда получаю недопустимые инструкции, это всего лишь простой тест, у меня была большая программа, которая работала, и внезапно после того, как ни одна причина не перестала работать, теперь я всегда получаю эту ошибку, даже если начинаю с нуля, как описано выше.
Я сузил его до pushl% eax и вызову printf, если я закомментирую эти строки, код работает нормально.
Есть идеи?
(Я запускаю программу в своем кластере linux университетов, поэтому я не изменил никаких настроек ..)