Сборка x86 на Mac

Кто-нибудь знает какие-либо хорошие инструменты (я ищу IDE) для написания сборки на Mac. Xcode немного громоздок для меня.

Кроме того, на Intel Mac, могу ли я использовать общий x86 asm? Или есть модифицированный набор инструкций? Любая информация о посте Intel.

Также: я знаю, что в Windows asm может работать в эмулируемой среде, созданной ОС, чтобы код мог думать, что он работает на своей выделенной машине. OS X обеспечивает то же самое?

8.08.2008 04:25:11
9 ОТВЕТОВ
РЕШЕНИЕ

После установки любой версии Xcode, предназначенной для компьютеров Mac на базе процессоров Intel, вы сможете писать ассемблерный код. Xcode - это набор инструментов, только одним из которых является IDE, поэтому вам не нужно его использовать, если вы этого не хотите. (Тем не менее, если есть определенные вещи, которые вы считаете неуклюжими, пожалуйста, сообщите об ошибке в репортере ошибок Apple - каждая ошибка будет связана с разработкой.) Кроме того, при установке Xcode будут установлены и Netwide Assembler (NASM), и GNU Assembler (GAS); это позволит вам использовать любой синтаксис сборки, который вам удобнее всего.

Вы также захотите взглянуть на Руководства по компиляции и отладке , потому что они документируют соглашения о вызовах, используемые для различных архитектур, на которых работает Mac OS X, а также как работают двоичный формат и загрузчик. В частности, соглашения о вызовах IA-32 (x86-32) могут немного отличаться от того, к чему вы привыкли.

Следует также помнить, что интерфейс системных вызовов в Mac OS X отличается от того, к чему вы привыкли в DOS / Windows, Linux или других версиях BSD. Системные вызовы не считаются стабильным API в Mac OS X; вместо этого вы всегда проходите через libSystem. Это гарантирует, что вы пишете код, переносимый из одной версии ОС в другую.

Наконец, имейте в виду, что Mac OS X работает на довольно широком спектре аппаратного обеспечения - от 32-разрядного Core Single до мощного четырехъядерного Xeon. При кодировании на ассемблере вы можете не оптимизировать столько, сколько думаете; то, что оптимально на одной машине, может быть пессимально на другой. Apple регулярно измеряет свои компиляторы и настраивает их вывод с помощью флага оптимизации «-Os», чтобы он был приличным во всей линейке, и есть обширные библиотеки векторной / матричной обработки, которые вы можете использовать для достижения высокой производительности с помощью ручных настроек, специфичных для CPU. ,

Собираться ради веселья - это здорово. В наши дни сборка на скорость не для слабонервных.

75
24.01.2016 14:07:27
Ссылка больше не действительна
Max MacLeod 12.10.2012 13:42:58
Два человека проголосовали против его sass, и нулевые люди фактически исправили ссылку ... было бы хорошо, если бы Apple фактически имела старые ссылки, перенаправляющие на новые статьи ... Я нашел ссылки на документы Apple, связанные с SO, почти всегда мертвы ...
ArtOfWarfare 19.01.2013 05:22:40
Версия Archive.org (последняя версия , прежде чем он получил рубленые) web.archive.org/web/20090622125037/http://developer.apple.com/...
Zimm3r 20.08.2013 03:43:49

Кроме того, на Intel Mac, могу ли я использовать общий x86 asm? или есть модифицированный набор инструкций? Любая информация о пост сборки Intel Mac помогает.

Это тот же набор инструкций; это те же фишки.

5
8.08.2008 04:33:25

Доступные для использования функции зависят от вашего процессора. Apple использует те же технологии Intel, что и все остальные. Так что да, универсальный x86 должен быть в порядке (при условии, что вы не на PPC: D).

Что касается инструментов, я думаю, что вам лучше всего выбрать хороший текстовый редактор, который «понимает» сборку.

1
8.08.2008 04:35:51

Забудьте о поиске IDE для записи / запуска / компиляции ассемблера на Mac. Но помните, что Mac - это UNIX. См. Http://asm.sourceforge.net/articles/linasm.html . Достойное руководство (хотя и краткое) по запуску ассемблера через GCC в Linux. Вы можете имитировать это. Mac используют чипы Intel, поэтому вы хотите посмотреть на синтаксис Intel.

0
8.08.2008 05:18:41

Как уже говорилось, не используйте syscall. Вы можете использовать стандартные вызовы библиотеки C, но имейте в виду, что стек ДОЛЖЕН быть выровнен на 16 байт для вызова функции Apple IA32 ABI .

Если вы не выровняете стек, ваша программа потерпит крах, __dyld_misaligned_stack_errorкогда вы сделаете вызов в любую из библиотек или платформ.

Следующий фрагмент собирается и запускается в моей системе:

; File: hello.asm
; Build: nasm -f macho hello.asm && gcc -o hello hello.o

SECTION .rodata
hello.msg db 'Hello, World!',0x0a,0x00

SECTION .text

extern _printf ; could also use _puts...
GLOBAL _main

; aligns esp to 16 bytes in preparation for calling a C library function
; arg is number of bytes to pad for function arguments, this should be a multiple of 16
; unless you are using push/pop to load args
%macro clib_prolog 1
    mov ebx, esp        ; remember current esp
    and esp, 0xFFFFFFF0 ; align to next 16 byte boundary (could be zero offset!)
    sub esp, 12         ; skip ahead 12 so we can store original esp
    push ebx            ; store esp (16 bytes aligned again)
    sub esp, %1         ; pad for arguments (make conditional?)
%endmacro

; arg must match most recent call to clib_prolog
%macro clib_epilog 1
    add esp, %1         ; remove arg padding
    pop ebx             ; get original esp
    mov esp, ebx        ; restore
%endmacro

_main:
    ; set up stack frame
    push ebp
    mov ebp, esp
    push ebx

    clib_prolog 16
    mov dword [esp], hello.msg
    call _printf
    ; can make more clib calls here...
    clib_epilog 16

    ; tear down stack frame
    pop ebx
    mov esp, ebp
    pop ebp
    mov eax, 0          ; set return code
    ret
29
24.01.2016 14:04:09
Может кто-нибудь сказать мне, почему запуск этого примера с "nasm -f мачо hello.asm && gcc -arch i386 -e _main -lSystem -o hello hello.o && ./hello" выдает "Ошибка шины: 10" в конце вывод ?
Colin 26.02.2014 14:57:56
Разобрался: думаю, была ошибка. Конец clib_prolog должен содержать% 1 байта, чтобы заполнить аргументы, а clib_epilog должен добавить% 1 байта. Я отредактировал ответ, чтобы отразить это.
Colin 26.02.2014 20:24:36

Хорошее пошаговое введение для Mac x86 см. По адресу http://peter.michaux.ca/articles/assembly-hello-world-for-os-x . У других ссылок, которые я пробовал, есть некоторые подводные камни, не связанные с Mac.

8
30.10.2011 21:57:49

Не забывайте, что в отличие от Windows, все системы на основе Unix должны иметь источник перед назначением, в отличие от Windows

На Windows его:

mov $ source,% destination

но на Mac все наоборот.

0
30.10.2011 21:58:34
Я думаю, что вы путаете синтаксис AT & T с Intel Syntax. Вы можете скомпилировать Intel Syntax на Unix Machine с помощью директивы компиляции GAS или использовать другой компилятор, например NASM.
user295190 28.08.2011 17:38:00
Если вы читаете какой-то дизассемблированный код на Mac и используете в качестве руководства типичную онлайновую справку по x86 asm, полезно знать об этом.
Colin 26.02.2014 14:43:38

Недавно я хотел узнать, как скомпилировать Intel x86 на Mac OS X:

Для носа:

-o hello.tmp - outfile
-f macho - specify format
Linux - elf or elf64
Mac OSX - macho

Для лд:

-arch i386 - specify architecture (32 bit assembly)
-macosx_version_min 10.6 (Mac OSX - complains about default specification)
-no_pie (Mac OSX - removes ld warning)
-e main - specify main symbol name (Mac OSX - default is start)
-o hello.o - outfile

Для Shell:

./hello.o - execution

Один лайнер:

nasm -o hello.tmp -f macho hello.s && ld -arch i386 -macosx_version_min 10.6 -no_pie -e _main -o hello.o hello.tmp && ./hello.o

Позвольте мне знать, если это помогает!

Я написал, как это сделать в моем блоге здесь:

http://blog.burrowsapps.com/2013/07/how-to-compile-helloworld-in-intel-x86.html

Для более подробного объяснения я объяснил на своем Github здесь:

https://github.com/jaredsburrows/Assembly

10
23.07.2013 03:12:27

Запуск сборки кода на Mac находится всего в 3 шагах от вас. Это можно сделать с помощью XCODE, но лучше использовать инструмент командной строки NASM. Для My Ease я уже установил Xcode, если у вас установлен Xcode, это хорошо.

Но Вы можете сделать это и без XCode.

Просто следуйте:

  1. Сначала установите NASM, используя Homebrew brew install nasm
  2. преобразуйте файл .asm в файл Obj, используя эту команду nasm -f macho64 myFile.asm
  3. Запустите файл Obj, чтобы увидеть OutPut с помощью команды ld -macosx_version_min 10.7.0 -lSystem -o OutPutFile myFile.o && ./64

Простой текстовый файл с именем myFile.asm написан ниже для вашего удобства.

global start
section .text

start:
    mov     rax, 0x2000004 ; write
    mov     rdi, 1 ; stdout
    mov     rsi, msg
    mov     rdx, msg.len
    syscall

    mov     rax, 0x2000001 ; exit
    mov     rdi, 0
    syscall

section .data

msg:    db      "Assalam O Alaikum Dear", 10
.len:   equ     $ - msg
5
25.01.2018 15:40:47
Я скачал DosBox для MacOS и чувствую лучший способ запустить язык ассемблера на MacOS. Позвольте мне поделиться некоторыми шагами, чтобы сделать это. 1- Загрузите DosBox.dmg для MAC и установите 2 - скопируйте папку с именем Assembly в любое место на вашем компьютере, в моем случае у меня есть папка с копиями сборки на рабочий стол. (Я скачал эту папку с веб-сайта, позвольте мне поделиться ссылкой git для загрузки в новой теме). 3 - запустите команду "mount c: / users / akhzar / desktop / Assembly" в DosBOX, затем напишите c: и нажмите enter. 4. Теперь вы находитесь на диске c для запуска команд на языке
Akhzar Nazir 12.06.2018 21:03:11
1- Теперь запустите файл .asm, используя следующую команду c: \> nasm a.asm -o a.com -l a.lst (это создаст два файла: один .lst, а другой - .com) 2- Теперь запустите AFD для см. это в режиме отладки c: \> afd a.com (используйте функциональные клавиши f1, f2 для запуска и завершения программы) 3- Чтобы вернуться из отладчика, используйте следующую команду quit
Akhzar Nazir 12.06.2018 21:09:21
Загрузите папку Language Assembly по этой ссылке github.com/akhzarna/AssemblyLanguageOnMac
Akhzar Nazir 12.06.2018 21:17:17
если я использую его с -macosx_version_min 10.14.1неопределенными символами для архитектуры x86_64: "_main", на которую ссылаются из: неявная запись / запуск для основных исполняемых символов, не найденных для предполагаемой архитектуры x86_64
gabbler 31.01.2019 12:15:20