ios汇编教程1

iOS汇编精讲(上篇) 前言 日常的应用开发中,主要用的语言是Objective(Swift),一些特殊场景下,可能还会用到C/C++,JavaScript,Shell,Python等。 那么,一个iOS开发者为什么要了解汇编这么底层的语言呢? 因为看得懂汇编能够提高的代码调试和逆向能力。 本文是作者学习汇编过程中整理的笔记,分为上下两篇:上篇主要是一些基础准备,下篇介绍Objective C汇编和一些逆... 阅读详情

form http://www.raywenderlich.com/37181/ios-assembly-tutorial 

当你写objective-c代码的时候,它最终将会变成机器码,ARM CPU能理解的1和0,而在objective-c代码和机器码之间,还有一门人类可以读懂的语言——汇编。

理解汇编可以帮助你很好地调试和优化你的代码,帮助你计算objective-c的运行时间,当然也可以满足你想深入窥视底层的好奇心。
在本ios汇编教程内,你可以学习到:
汇编是神马——你为什么需要关注它。
如何读懂汇编——特别是从objective-c方法生成的汇编语句。
如何从汇编的角度来调试程序——这对洞悉程序的运行以及查找了解bug和crash是如何产生的有很大的帮助。
为了能够从本教程获得更多,你必须已经熟悉objective-c编程,你也必须了解一些简单的计算机科学的概念,比如栈,CPU以及他们是如何工作的。如果你对CPU不熟悉,你可能需要停下来先去 http://www.howstuffworks.com/microprocessor.htm 看看相关的知识。打开你的xcode,准备和我一起深入ARM内部一窥究竟吧。
起始:神马是汇编?
objective-c通常被认为是一门高级语言。你的objective-c代码被编译器编译成汇编代码:低级,但是不是最低级。
这个汇编代码会被汇编器汇编成机器码,也就是CPU可以读懂的1和0。幸运的是,你不需要担心机器码,但是深入理解汇编在某些时候是相当有用的。
每个汇编指令都被设计来告诉CPU执行一个命令,比如“把这两个数相加”或者“取出这部门内存中的内容”。
除了主要的内存——比如iphone5的1G内存、又或许你的Mac上面的可能有的8G(又或者是其他大小),CPUs同样也有一点点可以被快速访问的内存。这些内存被分给寄存器(registers),就像是可以存放某个值的常量。
所有的ios设备(事实上,几乎现在所有的移动设备)使用基于ARM架构的CPUs。幸运的是,这是一个很容易读懂的指令集,尤其是因为它属于精简指令集,这意味这它只需要使用很少的指令。不管如何,它比x86指令集要易读得多。
一个汇编指令(或者语句)就像下面这样:
mov r0 #42
汇编有很多的指令和操作码,mov是其中之一,负责move数据,在ARM汇编中,目标地址是放在前面的,所以上面的指令就是move 42 到寄存器ro中。思考下面这个例子:
ldr r2 , [ r0 ]
ldr     r3 , [ r1 ] 
add     r4 , r2 , r3
不用担心,我不是要你们现在就理解上面这段程序。但是你应该可以大概的揣摩出上面这段代码是做神马的。这段指令是从内存中加载两个值,将他们存储在寄存器r2和r3中,然后将他们两个相加,并将结果存在寄存器r4中。
现在你知道学习汇编并不恐怖了吧?让我们来再深入一点吧。
iOS汇编入门教程 前言 对于应用层开发人员而言,仅仅掌握Objective-C和系统框架即可较好的完成开发,但在涉及到应用加固、逆向分析等内容时仅有应用层开发技能就会显得非常的无力,因此掌握汇编对于突破iOS开发水平的瓶颈十分有效。 一个例子 以反调试为例,我们知道,通过调用ptrace函数可以阻止调试器依附。 ptrace(31, 0, 0, 0) 这种方式能够被函数hook轻易破解,例如使用f... 阅读详情

相关推荐

iOS逆向之OC反汇编(下)

本文主要理解OC对象反汇编,以及block常见类型的反汇编 OC反汇编 创建一个Person类,并在main函数中初始化一个Person对象 @interface Person : NSObject @property(nonatomic, copy) NSString *name; @property(nonatomic, assign) int age; + (instancetype)person; @end @implementation Person + (instancetype)p

iOS-大鑫 663

iOS汇编教程:ARM(1)

感谢唐巧抽出时间对本文进行double-check。 SpeakAssemblySmall 你说的是汇编吗? 我们写的Objective-C代码,最终会被转换为机器代码 —— 由ARM处理器能识别的1和0组成。实际上,在机器代码之间,还有一门人类可以阅读的语言 —— 汇编语言。 了解汇编,可以深入到你的代码里面进行调试和优化的探索,并有助于你对Objective-C运行

向理想裸奔而去 的专栏 902

IEC 61851-24:2023 电动汽车导电充电系统 - 第24部分:直流电动汽车供电设备与电动汽车之间的数字通信,用于控制直流充电 - 完整英文电子版(110页)

IEC 61851-24:2023 与 IEC 61851-23 共同适用于直流电动车供电设备与电动道路车辆(EV)之间的数字通信,用于控制导电直流电力传输,额定电源电压最高可达1000伏交流电或最高1500伏直流电,额定输出电压最高可达1500伏直流电。

iOS汇编教程:ARM(1)和ARM(2)

iOS汇编教程:ARM(1)和ARM(2) 发布于:2013-06-24 09:56阅读数:18007 注:本文由破船译自:raywenderlich。感谢唐巧抽出时间对本文进行double-check。 我们写的Objective-C代码,最终会被转换为机器代码 由ARM处理器能识别的1和0组成。实际上,在机器代码之间,还有一 “” 阅读器

marryshi的专栏 677

ENSP:小型企业网络拓扑设计

包含的技术:ospf、dhcp中继、ac+ap、vrrp+mstp、acl、浮动路由、静态路由、vlan划分

weixin_45921302的博客 1万+

从牛顿冷却定律到热传导方程:一维热传导方程的物理直觉与数学推导

本文从牛顿冷却定律出发,结合傅里叶热传导定律和能量守恒原理,系统推导了一维热传导方程的数学形式。通过微元分析和物理直觉,揭示了温度随时间变化与空间二阶导数之间的关系,并阐释了热扩散率α的物理意义。文章还探讨了方程的边界条件、数值解法及其在材料科学和工程中的应用,为理解热量传递提供了清晰的物理图像和数学框架。

palm99的专栏 837

su mysql bash4.1_Centos7创建用户su登录后显示为 bash-4.1$

字典的循环和if语句字典是键-值(key-value)存储,循环的时候也是以键为对象 d = {'Michael': 95, 'Tracy': 85,'Bob': 75} for x in d : print x 输出结 ...Python数据结构与算法--List和DictionariesLists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着...

weixin_39958137的博客 220

农业杂草检测——甜菜杂草目标检测数据集

甜菜田中常见的杂草种类繁多,主要有稗草、狗尾草、芦苇、灰藜等。•稗草:一年生草本植物,和稻子外形极为相似。秆直立,光滑无毛。圆锥花序主轴具角棱,粗糙;小穗密集于穗轴的一侧,具极短柄或近无柄。花果期 7 - 10月。生长在稻田里、沼泽、沟渠旁、低洼荒地等。•狗尾草:又叫莠,因穗形像狗尾巴而得名。秆疏丛生,直立或基部膝曲上升。叶片条状披针形,叶鞘松弛,光滑,鞘口有毛;叶舌毛状。圆锥花序呈圆柱状,直立或稍弯垂,刚毛绿色或变紫色。夏、秋采收,晒干。常生长在麦田、谷子、玉米、棉花、豆类、花生、薯类、蔬菜、甜菜、马铃薯

qq_38220914的博客 1138

iOS App Security and Analysis: Part 1/2

iOS App Security and Analysis: Part 1/2 http://www.raywenderlich.com/45645/ios-app-security-analysis-part-1

且行且看 1216

shader基于高度的权重混合

效果图: 基于高度的权重混合 , 效果描述: (1)混合:三层混合, 例如 第一层是草,第二层是石头,第三层是沙子,三者混合显示 (2)权重: 三层的权重的和 为1, 三者是此消彼长的关系 (3)高度:高度会限制或者说是 束缚 着 效果 关于混合,再多说几句: (1)基于权重的混合:权重 ,跟顺序没有关系 只跟权重的大小有关系(在一层一层界限不清晰的地方,特别适用!!效果极好!!!!) (2)基于叠加的混合: 叠加 就是 一层一层的往上加。。。。 所以顺序特别重要(在雪地等效果中使用:因为

木马人 1117

YOLO26涨点改进 | 检测头Head创新改进篇 | 利用RFAConv感受野注意力卷积改进YOLO26检测头,RFAHead感受野注意力检测头,助力小目标检测高效涨点

YOLO26作为轻量化目标检测模型的新一代标杆,凭借高效的Backbone与Neck结构,在实时检测场景中表现突出,但原生检测头仍存在核心痛点——感受野固定、小目标特征感知薄弱、多尺度目标适配不足,导致在小目标密集、复杂背景遮挡等场景中漏检率偏高、定位精度不足。

qq_36130719的博客 167

iOS汇编教程

核心竞争力,怎么才能提高呢?成年人想要改变生活,逆转状态?那就开始学习吧~万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

2401_84097510的博客 779

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

weixin_74013772的博客 254

iOS汇编教程,vue前端开发

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。需要完整面试题的朋友可以点击蓝色字体免费获取件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。需要完整面试题的朋友可以点击蓝色字体免费获取。

2401_84091580的博客 776

华为OD机试真题 新系统 - WIFI设备网络规划 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2014

PCL CSF布料模拟算法【2026最新版】

CSF布料模拟地面滤波算法的PCL实现,博客长期更新,本文最近更新时间为:2026年10月26日。

点云侠的博客 3916

ios 汇编教程

注:本文由破船译自:raywenderlich 转自破船http://beyondvincent.com/2013/06/19/ios%E6%B1%87%E7%BC%96%E6%95%99%E7%A8%8B%EF%BC%9Aarm/。 为自己方便查找转自这里 你说的是汇编吗? 我们写的Objective-C代码,最终会被转换为机器代码 —— 由ARM处理器能识别的1

lmmilove的专栏 2043

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

iOS中的内嵌汇编

Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲作者 | sindrilin来源 | sindri...

iOS_开发 579

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

iOS 中的内嵌汇编

????????关注后回复“进群”,拉你进程序员交流群????????转自:sindrilin的小巢-sindrilinhttp://sindrilin.com/2019/10/23...

iOS_开发 617

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

iOS汇编教程:理解ARM

本文翻译自iOS Assembly Tutorial: Understanding ARM 翻译的不对的地方还请多多包涵指正,谢谢~ iOS汇编教程:理解ARM 当你写Objective-C代码时,它们最终转换成机器码---ARM处理器能理解的原始的0和1指令。在Objective-C和机器码之间,还有一种可直接理解的汇编语言。 理解汇编会让你在调试和优化时更加深入了解你的代码

Android系统攻城狮 2688
上一篇: 快速高效读C代码和读C++代码
下一篇: unsigned int类型分析
speedge
博客等级 码龄19年 8粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值