Segfault с сборкой x86 - PullRequest
       3

Segfault с сборкой x86

3 голосов
/ 29 апреля 2011

Я пытаюсь собрать небольшой фрагмент кода x86.Я на 32-битной машине, и я написал следующий код.Он должен просто добавить значения в EAX, а затем вернуть.Я понимаю, что не будет никакого выхода.Когда я компилирую это, используя

gcc main.S -o main

Он компилируется без ошибокНо когда я запускаю его, он вызывает ошибки (GDB утверждает, что он вызывает ошибки в первой инструкции movl).main.S содержит следующий код.Что я делаю не так?

.text  
.globl main  
main:  
pushl    %ebp  
movl     %esp, %ebp  
movl 0,  %eax  
addl $3, %eax  
addl $3, %eax  
leave 
ret

Ответы [ 2 ]

4 голосов
/ 01 мая 2011

Не ваш первый, но ваш второй movl

movl  0,%eax

не использует литерал $0, но адрес 0. Это может привести к хорошему segfault!

0 голосов
/ 29 апреля 2011

Синтаксис AT & T заставляет мои глаза болеть, но код выглядит хорошо для меня. Что произойдет, если вы используете Enter вместо первых двух инструкций или полностью отключите настройку стекового фрейма?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...