1

我是新手,这就是我想做的-

  1. 使用 ARMv7 程序集创建简单的程序 - 循环、计数器等
  2. 我希望能够在 Mac / Win / Linux 上编译它们以便在 iPhone 上运行
  3. 我有一部越狱的 iPhone,所以我可以在那里上传文件,用 ldid 签名并运行它

有人可以指点我如何使用免费提供的工具来做到这一点吗?

谢谢!

4

1 回答 1

1

我想知道你想在这里实现什么 - 是学习在 ARM 汇编器中开发吗?您想编写 iOS 应用程序吗?

如今,没有理智的人用汇编程序编写完整的应用程序——他们使用高级语言——并且在少数有限的情况下在汇编程序中进行优化。这是一项非常专业和有用的技能。

使用完整的 C 程序作为代理主机是很好的开始方式。用 C 语言为自己创建一个简单的 Hello world 程序,该程序调用(几乎)空函数。

您可以(大多数情况下)使用 XCode 使其工作(您需要安装可选的命令行工具)。除了 ARM 的最后一个链接阶段之外,所有的工作都使用clang. 这显然只是 MacOSX。

这种实验的一个更好的选择是 ARM Linux 系统,您无需与 iOS 的锁定环境作斗争。Raspberry Pi非常适合这项工作。您将需要一个用于 ARMv7 的交叉编译工具链——其中有很多。如果使用 Ubuntu,则有现成的预构建包可用。

Main.c

#include<stdio.h>

extern void func();

int main()
{
    printf("Hello World\n");
    func();
}

func.c

#include <stdio.h>

void func()
{
    printf("In func()\n");
}

为您的主机环境编译并运行它以查看它的工作原理:

gcc main.c func.c `./a.out'

现在为您的目标环境编译。交叉编译工具的确切名称取决于您安装的内容(我的是arm-angstrom-linux-gnueabi-gcc

arm-angstrom-linux-gnueabi-gcc main.c func.c

复制到您的目标,并证明它有效。

现在你可以开始编写一些汇编程序了。为我们的受害者gcc文件生成 ARM 汇编程序func.c- 这会生成一个文件func.s

arm-angstrom-linux-gnueabi-gcc func.c -s

    .cpu arm7tdmi-s
.fpu softvfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 6
.eabi_attribute 18, 4
.file   "func.c"
.section    .rodata
.align  2
.LC0:
.ascii  "In func()\000"
.text
.align  2
.global func
.type   func, %function
func:
@ Function supports interworking.
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, uses_anonymous_args = 0
stmfd   sp!, {fp, lr}
add fp, sp, #4
ldr r0, .L2
bl  puts
sub sp, fp, #4
ldmfd   sp!, {fp, lr}
bx  lr
.L3:
.align  2
.L2:
.word   .LC0
.size   func, .-func 
.ident  "GCC: (GNU) 4.5.4 20120305 (prerelease)"
    .section    .note.GNU-stack,"",%progbits

你可以在这里看到标签func:和之间.L3是业务的结束func()——它几乎是所有功能的序言和结语。您需要查看ARM 过程调用标准以了解这些是什么以及使用哪些寄存器的指导。

完成编辑后,使用 GCC 再次编译整个内容

arm-angstrom-linux-gnueabi-gcc main.c func.s

...并测试它。

于 2012-09-04T10:12:20.693 回答