iOS汇编入门必备(指令篇)

本文介绍了iOS汇编中的指令和伪指令,包括它们的区别、OS X特有的伪指令,如数据定义、控制指令等,并详细阐述了汇编中的注释风格、寄存器使用以及常见的计算指令,如移动、算术、逻辑运算等,是iOS逆向学习的入门指南。
摘要由CSDN通过智能技术生成
一、汇编中指令和伪指令的区别?

指令:机器码助记符,每条指令会生成机器码,由CPU读取执行。
伪指令(伪操作):没有与之对应的机器码,非可执行指令,需要汇编器来解释。

二、OS X 伪指令:

所有汇编程序伪指令(GUN汇编器通用伪指令)的名称都是以‘.’开头。名称大多数不区分大小写,通常使用小写字母表示。

1、定义数据伪指令(下面数据类型空间大小为arm64下的size)

.byte                      // 定义1个字节大小的变量   
.short                     // 定义2个字节大小的变量 
.int                        // 定义4个字节大小的变量
.long                      // 定义8个字节大小的变量
.quad(大数)         // 定义8个字节大小的变量
.ascii                      // 定义字符串以非零结束,行尾需要添加’\0’
.asciz                      // 定义字符串以零结束

2、汇编控制
(1)条件判断伪指令:

.if                        /* 条件判断开始 */
.else 
.endif                   /* 条件判断结束 */

(2)宏定义伪指令:

.macro 宏名                  /* 宏定义开始 */
.endmacro                   /* 宏定义结束 */

3、定义一个section
Mach-O文件中的数据或指令都是存在segment中(可通过MachOView
查看),一个segment由零个或者多个section组成,segment 名称用双下划线开头 +全字母大写(例如:__DATA)表示,section名称用双下划线开头+全字母小写(例如:__data)表示

.section  segname , sectname [[[ , type ] , attribute ] , sizeof_stub ]

示例:
.section __DATA __data                                        // 等价于    .data
.section __TEXT __text                                        // 等价于    .text
.section __TEXT __const                                        // 等价于    .const
.section __TEXT,__cstring, cstring_literals            // 等价于    .cstring

更多内容详见文章末尾参考资料:OS X Assembler Directives

4、对齐align
用fill_expression(指定,则必须是绝对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值