Я изо всех сил, чтобы понять, почему это x86-код сборки, отлично компилируется с GCC 4.2.1 (LLVM) на OSX, но дает ошибку сегментации, когда исполняемый файл запускается:Segfault с поп/толчок в x86/OSX
.globl _main
_main:
push %rbp
mov %rsp, %rbp
mov $1, %rbx
push %rbx
lea L_.str0(%rip), %rdi
mov %rbx, %rsi
call _printf
pop %rbx
pop %rbp
ret
.section __TEXT,__cstring,cstring_literals
L_.str0:
.asciz "%d \000"
Я заметил, что если линия pop %rbx
перемещается до call _printf
, программа работает правильно. Но почему это должно терпеть неудачу в ее первоначальной форме?
Вам нужно выровнять стек ... – Macmade
@Macmade верен, я верю - я скомпилировал и запустил ваш код, и журнал сбоев даже говорит, что это несоосность стека (не выровнено по 16 байт). –
@PaulR - Спасибо. Есть ли способ сделать это с помощью директивы? или мне нужно посыпать код для выравнивания вручную? – fairville