Tôi đang cố gắng học viết ngôn ngữ lắp ráp cho hệ điều hành Mac 64 bit. Tôi không có vấn đề với 32 bit Mac OS và cả 32 bit và 64 bit Linux.Làm thế nào để viết ngôn ngữ lắp ráp chào chương trình thế giới cho 64 bit Mac OS X bằng printf?
Tuy nhiên, Mac OS 64 bit là khác nhau và tôi không thể tìm ra. Vì vậy tôi ở đây để nhờ giúp đỡ.
Tôi không gặp sự cố khi sử dụng lệnh gọi hệ thống để in. Tuy nhiên, tôi muốn tìm hiểu cách gọi hàm C bằng ngôn ngữ lắp ráp 64 bit của Mac OS.
hãy nhìn vào đoạn mã sau
.data
_hello:
.asciz "Hello, world\n"
.text
.globl _main
_main:
movq $0, %rax
movq _hello(%rip), %rdi
call _printf
tôi sử dụng $ gcc -arch x86_64 hello.s
để lắp ráp và liên kết.
Nó tạo mã nhị phân. Tuy nhiên, tôi gặp lỗi phân đoạn khi chạy nó.
Tôi đã thử thêm "subq $ 8,% rsp" trước khi gọi _printf, vẫn giữ nguyên kết quả như trước.
Tôi đã làm gì sai?
Nhân tiện, có cách nào để gỡ lỗi mã này trên máy Mac không? Tôi đã thử thêm -ggdb hoặc -gstab hoặc -gDWARF và $ gdb ./a.out và không thể xem mã và đặt điểm ngắt.
bài viết tốt về công ước gọi x86_64: http://nickdesaulniers.github.io/blog/2014/04/18/lets-write-some-x86-64/ –
eax cho số lượng vararg: http://stackoverflow.com/questions/6212665, vấn đề căn chỉnh: http://stackoverflow.com/questions/10324333, http://stackoverflow.com/questions/14000351, câu hỏi chung: http://stackoverflow.com/questions/10857273 –