所以我开始了汇编编程。这在我的 Ubuntu 机器上非常简单:使用 NASMamd GNU ld,我能够在半小时内编写或多或少复杂的 HelloWorld 风格的程序。但是当谈到 iPhone 时,它是如此复杂。首先,我有一个JB'en iPhone 3G on 4.2.1固件,也就是说我使用的是Darwin kernel v10的ARM端口。第二。我必须使用 GNU,因为 iPhone 没有 NASM:本机工具链(Mac OS X 上的 Xcode 和 linux 上的开源工具链)使用 GCC。所以我收集了有关以下方面的基本信息: - 如何用 GNU 编写程序集作为语言;- 什么是基本的 ARM 指令、寄存器、内存访问。
但即使是 HelloWorld 也需要内核调用才能写入标准输出。我的问题是:使用什么内核调用以及如何使用(哪些参数去哪里);我应该使用 swi #ARM 指令,不是吗?
那么,您能否发布一些信息/链接到教程,或者有 ARM Darwin Hello world asm 代码的人?
截至目前,我可以这样做:
;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
那么,请问有人吗?