문제
는 사람은 좋은 도구(내가 찾 Ide)를 쓰는 어셈블리에 맥.Xcode 조금 복잡하다.
또한,Intel Macs 사용할 수 있습니는 일반 86asm?또는 거기에 수정된 명령입니까?에 대한 정보를 포스트 인텔 등이 있습니다.
도:내가 알고 있는 윈도우에서,asm 에서 실행할 수 있는 에뮬레이션 환경을 만든 OS 에 의해를 하자 코드를 생각에서 실행 자신의 전용 기계입니다.가 OS X 을 통해 이와 같은 것은?
해결책
설치한 후에는 어떤 버전의 엑스 코드를 타겟팅 Intel 기반 Mac,당신를 쓸 수 있어야 어셈블리 코드입니다.Xcode 는 도구 세트를,하나만 IDE,그래서 당신이 사용하지 않는 경우에 당신은 그것을 원하지 않습니다.(는 말이 있는 경우에,특정한 것들을 찾을 투박하시기 바랍에서 버그 애플의 버그 기자 -모든 버그가 엔지니어링입니다.) 또한,설치 Xcode 이 모두 설치 Netwide Assembler(NASM)과 GNU Assembler(GAS);을 사용할 수 있도록하는 어떤 어셈블리는 구문을 가장 편안하다.
당신은 또한을 살펴보 컴파일러&디버깅을 가이드, 기 때문에,그 문서의 전화 사용된 규칙에 대한 다양한 아키텍처는 맥 OS X 에서 실행하는 방법뿐만 아니라,바이너리 형식과 장전기 작동합니다.IA-32(x86-32 분)호출 규칙에서는 특정 약간 다를 수 있습니다 무엇에서 오신 것을 환영합니다.
다른 것을 염두에 두고 시스템 전화 인터페이스에서 Mac OS X 에서 다른 무엇은 당신이 사용할 수 있습니다 DOS/Windows,Linux,또는 다른 BSD 맛입니다.시스템 호출으로 간주되지 않습니다 안정적인 API Mac OS X;대신에,당신은 항상 통 libSystem.는 것입니다 있는지 확인하는 코드를 작성하는 휴대용 중 하나에서의 방출 OS 있습니다.
마지막으로,유지 하는 마음에 Mac OS X 에 걸쳐 실행 예쁜의 다양한 하드웨어 모두에서 32 비트 핵심 단일을 통해 높은-엔드 quad-core Xeon.여 코딩에 어셈블리 되지 않을 수도 있습니다 최적화하는만큼 당신이 생각하는;what's 에 최적의 한계 될 수 있습 pessimal 다.Apple 정기적으로 측정 컴파일러와 음악의 출력으로"-Os"깃발 최적화하는 것이 현명한 방법에서 라인,그리고 거기에 다양한 벡터/매트릭스 처리할 수 있는 라이브러리를 사용하여 높은 성능을 얻을 수 있는 손으로 조정된 CPU 별 구현.
을 어셈블리에 대한 재미있은 좋은 것입니다.을 어셈블리에 대한 속도가 심장 약한 이러한 일입니다.
다른 팁
기 전에 명시된 바와 같이,사용하지 않는 syscall.당신이 사용할 수 있는 표준 C 라이브러리 호출을 하지만,그러나 알고 있는 스택해야 하는 16 바이트의 정렬당 애플의 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
한 단계별 86Mac 특정 소개보 http://peter.michaux.ca/articles/assembly-hello-world-for-os-x.다른 링크를 했는데 일부는 비 Mac 함정이 있습니다.
최근 알고 싶다고 생각하여 컴파일하는 방법 Intel x86Mac OS X:
에 대한 nasm:
-o hello.tmp - outfile
-f macho - specify format
Linux - elf or elf64
Mac OSX - macho
에 대한 ld:
-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
포탄을 위한:
./hello.o - execution
One-liner:
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 here:
실행하는 어셈블리 코드를 Mac 에서는 3 단계에서 당신입니다.그것을 할 수 있는 엑스 코드를 사용하여 하지만 더 나은 사용하는 것입 NASM 명령행 도구입니다.에 대한 내성 이미 설치 Xcode 있는 경우,Xcode 에 설치한다.
하지만 그것을 할 수 있는 없이 XCode 니다.
그냥 따라:
- 첫 번째 NASM 설치를 사용하여 Homebrew
brew install nasm
- 변환합니다.asm 파일로 Obj 파일을 사용하여 이 명령
nasm -f macho64 myFile.asm
- 실행 Obj 파일을 참조 출력을 사용하여 명령
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
또한,Intel Macs 사용할 수 있습니는 일반 86asm?또는 거기에 수정된 명령입니까?에 대한 어떠한 정보 게시 Intel Mac 어셈블리에 도움이 됩니다.
그것은 동일한 명령어 집합;그것은 동일한 칩이 있습니다.
사용 가능한 기능을 사용에 의존하는 귀하의 프로세서입니다.Apple 용 Intel 는 물건으로 다른 사람.그래서 그래,일반 86 잘해야(고 가정하고 당신에 PPC:D).
까지 도구가 이동,나는 당신의 최선의 방법은 좋은 텍스트 편집기로'이해'어셈블리입니다.
잊을 찾는 것에 대해 IDE 쓰/실행/컴파일 어셈블러 Mac.그러나,기억하 mac UNIX.보 http://asm.sourceforge.net/articles/linasm.html.괜찮은 가이드(그러나 짧은)를 실행하는 어셈블러를 통해 GCC 리눅스에서.을 흉내낼 수 있다.맥을 사용하여 인텔 칩 그래서 당신은에서 보고 싶은 Intel 문입니다.
는 것을 잊지 않는 윈도우와 달리,모든 유닉스 기반 시스템이 필요하기 전에 원본 대상과는 달리 Windows
윈도우의:
mov$원,%목적지
하지만 Mac 의 다른 방법으로 주위입니다.