iOS相关的ARM汇编

时间:2022-09-06 00:00:20

一、iOS汇编
1、真机:arm64汇编
寄存器
指令
堆栈
2、模拟器:x86汇编

二、lldb

(lldb)register read x0
(lldb)register read w0
(lldb)register write x0 0x002a1b
(lldb)register read w0
(lldb)register read

三、生成汇编文件

xcrun -sdk iphoneos clang -S -arch arm64 main.c -o main.s

四、寄存器
1、 通⽤寄存器
64bit的:x0 ~ x28
32bit的:w0 ~ w28(属于x0 ~ x28的低32bit)
x0 ~ x7通常拿来存放函数的参数,更多的参数使用堆栈来传递 x0通常拿来存放函数的返回值

2、 程序计数器
pc(Program Counter) 记录CPU当前指令的是哪一条指令 存储着当前CPU正在执⾏的指令的地址 类似于8086汇编的ip寄存器

3、 堆栈指针
sp(Stack Pointer)
fp(Frame Pointer),也就是x29

4、 链接寄存器
lr(Link Register),也就是x30
存储着函数的返回地址
 
5、 程序状态寄存器
cpsr(Current Program Status Register)
spsr(Saved Program Status Register),异常状态下使⽤
![程序状态寄存器1](https://upload-images.jianshu.io/upload_images/8285086-429a8c7b1240c185.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![程序状态寄存器2](https://upload-images.jianshu.io/upload_images/8285086-df56d274823a76c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

五、怎么编写汇编指令
1、在Xcode的OC文件中内嵌写入

__asm{
"mov x0, 100"
}

2、用Xcode新建.s文件里面写汇编代码
arm.h

#ifndef arm_h
#define arm_h void test(); int add(int a, int b);
int sub(int a, int b); #endif /* arm_h */

arm.s

// 声明一个代码段
.text
.global _test, _add, _sub // 内部\私有函数
mycode:
mov x0, #0x1
mov x1, #0x2
add x2, x0, x1
ret // test函数的实现
_test:
; bl指令(函数调用)
bl mycode
mov x3, #0x2
mov x4, #0x1 ; b指令带条件
; mov x0, #0x5
; mov x1, #0x5
; cmp x0, x1
; bgt mycode
; mov x0, #0x5
; ret ; mycode:
; mov x1, #0x6 ; b指令
; b mycode
; mov x0, #0x5
; mycode:
; mov x1, #0x6 ; cmp指令
; mov x0, #0x1
; mov x1, #0x3
; cmp x0, x1 ; mov指令
; mov x0, #0x8
; mov x1, x0 ; add指令
; mov x0, #0x1
; mov x1, #0x2
; add x2, x0, x1 ; sub指令
; mov x0, #0x5
; mov x1, #0x2
; sub x2, x0, x1
ret // add函数的实现
_add:
add x0, x0, x1
ret // sub函数的实现
_sub:
sub x0, x0, x1
ret

使用的时候跟C语言的使用方式一致,导入头文件,直接调用全局(global)函数。

iOS相关的ARM汇编的更多相关文章

  1. iOS 逆向之ARM汇编

    最近对iOS逆向工程很感兴趣. 目前iOS逆向的书籍有: <Hacking and Securing IOS Applications>, <iOS Hacker's Handboo ...

  2. iOS程序破解——ARM汇编基础

    原文在此:http://www.cnblogs.com/mddblog/p/4951650.html 一.Thumb指令与ARM指令 Thumb指令为16位,因此存储代码的密度高,节省存储空间.但是功 ...

  3. ARM汇编

    ARM汇编 ISA ISA即指指令集架构(Instruction Set Architecture)是与程序设计有关的计算机架构的一部分,包括本地数据类型.指令.寄存器.地址模式.内存架构.中断和意外 ...

  4. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

  5. 经常使用ARM汇编指令

    一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...

  6. 【嵌入式开发】 ARM 汇编 &lpar;指令分类 &vert; 伪指令 &vert; 协处理器访问指令&rpar;

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137 转载请著名出处 本博客相关文档下载 :  -- AR ...

  7. 大脸猫讲逆向之ARM汇编中PC寄存器详解

    i春秋作家:v4ever 近日,在研究一些开源native层hook方案的实现方式,并据此对ARM汇编层中容易出问题的一些地方做了整理,以便后来人能有从中有所收获并应用于现实问题中.当然,文中许多介绍 ...

  8. ARM 汇编的mov操作立即数的疑问

    1. 因为对arm汇编有些指令还不能理解,特别是一些相似功能指令间的区别.偶然在网上搜到"faq ARM assembly",其中描述的几个问题还是值得好好研究一下. 2. 慢慢的 ...

  9. GNU ARM 汇编指令

    第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初始化完成后就可以跳转到C ...

随机推荐

  1. IteratorPattern&lpar;迭代子模式&rpar;

    /** * 迭代子模式 * @author TMAC-J * 聚合:某一类对象的集合 * 迭代:行为方式,用来处理聚合 * 是一种行为模式,用于将聚合本身和操作聚合的行为分离 * Java中的COLL ...

  2. Java程序设计之消费者和生产者

    新建一个Break类,表示食物数量. public class Break { public static final int MAX = 10; //最多一次性煮十个面包 Stack<Inte ...

  3. Confluence搭建

    参见 https://confluence.atlassian.com/display/CONF54/Installing+the+Confluence+EAR-WAR+Edition 下载5.4.4 ...

  4. ST Lab1 junit test

    代码地址:  https://github.com/newff/st-lab1 Tasks: Install Junit(4.12), Hamcrest(1.3) with Eclipse Insta ...

  5. 2 &gt&semi;&amp&semi;1 的准确含义

    1. 2代表标准错误,2 > 表示重定向,就是把标准错误重定向到 1中,这个1如果想表示标准输出的话,就必须在前面加 & 2. 正常情况下,下面这个会有很多错误信息,但是加上2>& ...

  6. Intel RDT

    首先 spec, 从671页看起 https://software.intel.com/sites/default/files/managed/a4/60/325384-sdm-vol-3abcd.p ...

  7. 冲刺One之站立会议5 &sol;2015-5-18

    2015-5-18 服务器部分大体已经完工,现在我们主要是在把登陆界面和服务器组装起来,这个过程是很让人头痛的,以为其中涉及到了很多网络协议.网络编程的知识,由于之前我们没有接触过所以实现起来会觉得很 ...

  8. ToDictionary的用法

    上次已经查过一次了,这次又忘了...看来有必要记录一下: linq查询结果经常ToList.ToArray什么的,但是ToDictionary用的比较少,导致经常忘记怎么用... ToDictiona ...

  9. 中行用户购买KIS2014 68元&sol;3年,时间:2013&period;10&period;18-2013&period;11&period;18

    活动地址:http://boc.kaba365.com/4989800.asp

  10. mongodb查看数据库和表的信息

    mongodb查看数据库和表的方法比较简单,在为这里推荐使用stats的方法,直观并且详细. 1.查看数据库 db.stats();1输出: { "db" : "siri ...