加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

深入iOS系统底层之程序中的汇编代码

发布时间:2019-05-31 01:35:37 所属栏目:业界 来源:欧阳大哥2013
导读:副标题#e# 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。--(老子道德经 ) 对于一个闭源系统来说如果想研究某些逻辑的内部实现就需要对汇编语言进行掌握和了解、对于某些需要高性能实现的逻辑来说用汇编语言实现可能是最好的选择、对于某些逻辑

在Xcode中无论是AT&T还是arm汇编语言的关键字都以.开头。编写汇编代码主要就是数据的定义以及代码指令。一个汇编语言文件中还可以使用和C语言类似的文件引入以及各种预编译指令,还可以引用高级语言中定义的变量和符号以及函数。

1.注释

汇编指令中注释和C/C++/OC相同。arm体系下的汇编代码特有的行注释是代码后面的 ;号注释,而x86_64体系下的汇编代码的特有的行注释是##。

2.节

无论是指令还是数据管理的单位都是节(Section)。因为在iOS系统的mach-o文件格式中的数据和指令的存储都是以段(Segment)和节为单位划分的。任何代码和数据总是在某个节内被定义。每个节都归属于某个段,每个节有一个唯一的名字。节定义的关键字和语法如下:

  1. .section <段名>,<节名>,<节属性> 

相同的段名和节名可以出现在多出,数据和代码都是定义在由.section指定的节下开始,并结束于下一个节的定义开始处。系统最终在生成代码时会将相同的段名和节名的内容统一汇总到一起存储。一般情况下所有的指令代码都是在__TEXT段下的节中被定义,而数据定义则是在__DATA段下的节中被定义。如果汇编代码中不指定节名则数据和代码默认是在__TEXT,__text下。系统还提供了两个简化代码段和数据段的节定义关键字。

  1. //代码段的定义,等价于 .section __TEXT,__text 
  2. .text 
  3.   
  4. //数据段的定义,等价于 .section __DATA,__data 
  5. .data 

在反汇编代码中的节定义中除了指定名称外你还会看到一些比如:regular,pure_instructions,no_dead_strip,cstring_literals等等节定义的属性。这些属性所代表的意义和mach-o文件格式中的结构体struct section_64中的flags字段所表示的意义一致。flags可设置的值就是中那些以S_开头的宏定义值。

3.标签和符号

标签是一个可被理解的地址偏移表示,是一个地址的别名。使用标签的目标是为了让程序代码更具有可读性。标签定义后可以在其他指令中引用,也可以在数据变量中被引用。标签的定义规则为:

  1. 标签名1: 
  2. //代码和数据 
  3. 标签名2: 
  4. //代码和数据 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读