最新消息:本站技术交流 QQ 群:28124927

[iOS Hacker] Xcode 玩转 arm64 汇编基础

iOS/MacOSX/移动安全 exchen 5743浏览

已经熟悉了x86汇编,所以其他的理论就不多记了,主要是记录以下这些。

iphon5s以上都是arm64的设备
armv6 设备:iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch
armv7 设备:iPhone3GS, iPhone4, iPhone4S
iPad, iPad2, iPad3(The New iPad), iPad mini
iPod Touch 3G, iPod Touch4
armv7s设备:iPhone5, iPhone5C, iPad4(iPad with Retina Display)
arm64 设备:iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display)

最常用汇编指令
str 将数据从寄存器中读取存放到内存
ldr 将内存中的数据读取放到寄存器
bl 跳转

32位寄存器
R0-R3 //函数的前4个参数放在R0-R3中,其他的参数放到栈中,返回值在R0
R7
R9
R13 //SP寄存器
R14 //LR寄存器,保存函数返回地址
R15 //PC寄存器

32位的寄存器容量是8位,64位寄存器的容量16位的,数量也更多一些,x1,x2,x3...
---------------------------------------------------------------------
以下是64位的arm汇编的一个实例,理解arm汇编的函数调用的过程。
打开Xcode,新建ios工程,在main.m下写如下代码

在Xcode菜单栏选择Product=>Perform Action => Assemble main.m, 注意选择在真机编译才能生成arm汇编,在模拟器是x86的。
显示代码有很多.loc开头的鬼东西,为了看着方便可以删掉。

这是在真机运行的汇编代码和上面是一样的。

main函数里调用funcAdd的过程

main函数真机运行的汇编代码

转载请注明:exchen's blog » [iOS Hacker] Xcode 玩转 arm64 汇编基础