1
Я новичок в x86-64 сборки, и я бегу простой код x64 сборки:ошибки сегментации при вызове C Функция
.global main
.text
main:
mov $message, %rdi
sub $8, %rsp
call puts
add $8, %rsp
ret
message:
.asciz "Hello, World"
После компиляции кода с использованием GCC под Cygwin, он всегда возвращает мне ошибку :
segmentation error
, но если удалить
call puts
программа работает без ошибок. Так в чем проблема с этим заявлением о вызове?
Возможно, вам не хватает функции вызова функции ABI. Это зависит от платформы. Напишите эквивалентную программу C и скомпилируйте ее с помощью '-S -O3'. Полученный ассемблер должен дать вам подсказку о том, что требуется платформе. Как правило, не очень хорошо писать эту функцию в ассемблере. По крайней мере, намного проще написать обертку на C и иметь специальные ассемблерные части внутри с '__asm__'. –