Ошибка сборки «Ошибка сегментации: 11»

#assembly #x86

#сборка #x86

Вопрос:

 section .data
        msg: db 'Hello World di Simona',10  ;the message to write
        len: equ $ - msg                    ;length of the message

section .text
        global _start
        _start:
                mov edx, len                ;save the length
                mov ecx, msg                ;save the message to display
                mov ebx, 1                  ;prepare for the system call
                mov eax, 4
                int 0x80                    ;sytem call
  

Первый вопрос: когда я использую компоновщик, я получаю это предупреждение «-macosx_version_min не указан, предполагается 10.7», как я могу этого избежать?

Второй вопрос: Все идет хорошо, пока я не запущу исполняемый файл, я получаю эту ошибку «Ошибка сегментации: 11», что это значит? Что не так с этим кодом?

Дополнительная информация: Я использую nasm под Mac OS X с процессором Intel Core 2 Duo, сегодня у меня есть бенн на моем первом уроке сборки, так что я новичок в этом языке.

Комментарии:

1. 1. Как насчет указания -macosx_version_min? 2a. Ошибка сегментации означает, что вы пытались получить доступ к памяти, к которой у вас нет доступа. 2b. Запустите программу в отладчике, чтобы увидеть, где возникает ошибка сегментации и к какой памяти вы пытаетесь получить доступ.

2. Что следует int 0x80 ? Если это удастся (и похоже, что так и должно быть), что должно произойти впоследствии?

3. Это похоже на 32-разрядные системные вызовы в стиле Linux. Я думаю, что mac osx использует совершенно другой способ выполнения системных вызовов.

Ответ №1:

Системные вызовы в стиле Linux не будут работать в Mac OS X, как отметил пользователь786653.