Итак, я занялся программированием сборки. В моем поле Ubuntu довольно просто: используя NASMamd GNU ld, я смог написать более или менее сложные программы в стиле HelloWorld через полчаса. Но когда дело доходит до iPhone, это так сложно. Прежде всего, у меня есть JB'en iPhone 3G на прошивке 4.2.1, что означает, что я использую порт ARM ядра Darwin v10. Второй. Я должен использовать GNU, поскольку NASM для iPhone не существует: встроенная инструментальная цепочка (как Xcode в Mac OS X, так и openware tooolchain на Linux) использует GCC. Итак, я собрал основную информацию о: - как писать сборку в GNU как язык; - каковы основные инструкции ARM, регистры, доступ к памяти.ARM Darwin assembly - поиск системных вызовов (возможно, обучение)
Но даже для HelloWorld требуются вызовы ядра для записи в stdout. Мой вопрос: какое ядро следует использовать и как (какие аргументы идут туда); Я должен использовать инструкцию swi # ARM, не так ли?
Итак, можете ли вы разместить какую-либо информацию/ссылки на учебные пособия или кого-нибудь с ARM Darwin Hello world asm code?
В настоящее время, я мог бы сделать это:
;Hello World for Linux and NASM
section data
hello db "Hello World"
helloLen equ $ - hello
section text
global _start
_start:
mov eax, 4 ; sys_write
mov ebx, 1 ; to stdout
mov ecx, hello ; address of string
mov edx, helloLen ; value (because of eq!!!) of strLen
int 0x80 ; call awesome Linux kernel
mov eax, 1 ; sys_exit
mov ebx, 0 ; "return 0; " if you like C
int 0x80 ; call kernel to end program
на ARM, однако, я мог бы сделать только так:
.text
start:
mov r0, #0
mov r1, #234
add r2, r0, r1
@all mov and add and other stuff works fine
swi #0xc00
@all that I get is Bad system call error
Итак, кто-нибудь, пожалуйста?
Одна хорошая вещь, которую вы можете сделать, это запустить GCC с флагом -S, который даст вы сборочный вывод, на который вы можете посмотреть, как он это делает. – 2010-12-06 23:13:37