【iOS】编译二进制文件说明

编译二进制文件说明

如何生成

使用Xcode进行编译 ,会生成二进制相关文件,可以更详细看产物的布局

项目Target -> Build Setting -> Linking Genera -> Write Link Map = YES

文件路径

执行上述操作后,Command+B后,会生成二进制的产物,(我的项目名为TYPlayground),其大致路径为(如下图):
/Users/xxx/Library/Developer/Xcode/DerivedData/TYPalyground-doefpfbhcehqtqexpxoqzqpabkvm/Build/Intermediates.noindex/TYPalyground.build/Debug-iphonesimulator/TYPalyground.build/

文件说明

TYPalyground-LinkMap-normal-x86_64.txt 显示了link的详细信息

第一部分:.o文件

展示编译后的.o文件,(下图中的3-10行)

展示需要链接的Framework,(下图中的11-17行)

第三部分:Segment

Sections 区域

这个区域提供了各个段(Segment)和节(Section)在可执行文件中的位置和大小。这个区域完整的描述可执行文件中的全部内容。

Address + Size + 1 = 下一个section的起始地址

其中,段分为两种

  • __TEXT 代码段
  • __DATA 数据段
TEXT 复制代码
# Sections:
# Address	Size    	Segment	Section
0x100001330	0x00001A7A	__TEXT	__text          // 代码
0x100002DAA	0x00000084	__TEXT	__stubs
0x100002E30	0x00000028	__TEXT	__const
0x100002E58	0x00001216	__TEXT	__objc_methname     // OC 方法
0x10000406E	0x000000D8	__TEXT	__cstring           // 字符串
0x100004146	0x000000D4	__TEXT	__objc_classname    // OC 类名
0x10000421A	0x00000B88	__TEXT	__objc_methtype     // OC 方法类型
0x100004DA4	0x0000008C	__TEXT	__gcc_except_tab
0x100004E30	0x00000111	__TEXT	__entitlements
0x100004F41	0x00000042	__TEXT	__ents_der
0x100004F84	0x00000070	__TEXT	__unwind_info
0x100005000	0x000000D0	__DATA_CONST	__got
0x1000050D0	0x00000040	__DATA_CONST	__const           // 常量
0x100005110	0x000000C0	__DATA_CONST	__cfstring
0x1000051D0	0x00000038	__DATA_CONST	__objc_classlist  // OC 方法列表
0x100005208	0x00000010	__DATA_CONST	__objc_nlclslist  
0x100005218	0x00000028	__DATA_CONST	__objc_protolist  // OC 协议列表
0x100005240	0x00000008	__DATA_CONST	__objc_imageinfo  
0x100005248	0x00000068	__DATA_CONST	__objc_classrefs
0x100006000	0x000016D8	__DATA	__objc_const              // OC 常量
0x1000076D8	0x00000180	__DATA	__objc_selrefs
0x100007858	0x00000008	__DATA	__objc_protorefs
0x100007860	0x00000018	__DATA	__objc_superrefs          // OC 父类引用
0x100007878	0x00000020	__DATA	__objc_ivar               // OC iar
0x100007898	0x00000230	__DATA	__objc_data
0x100007AC8	0x000001E0	__DATA	__data
0x100007CA8	0x00000010	__DATA	__bss
第四部分:Symbol

上一部分是对Segment进行了一级划分,分出了Section

这一部分是对Section进一步划分,分出Symbol。

可以看到 +[TestViewController load]的起始地址和上面__TEXT __text // 代码的地址是一致的,以此类推,可以获取上面各个节的信息。

复制代码
# Symbols:
# Address	Size    	File  Name
0x100001330	0x00000060	[  3] +[TestViewController load]
0x100001390	0x00000090	[  3] -[TestViewController init]
0x100001420	0x000001C0	[  3] -[TestViewController viewDidLoad]
相关推荐
songgeb17 分钟前
YYImage Bug:一行之差,正常 JPEG 如何在 iOS 被读成条纹
ios·swift
茶底世界之下7 小时前
阴天花摊不必变暖:用 Awaking 留住花色与湿街
ios·app·产品
Fatbobman(东坡肘子)21 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
茶底世界之下1 天前
斜光下的旧自行车:用 Awaking 留一版复古胶片色
ios·app·产品
2501_916008891 天前
iPhone 设备信息查看,用 KeyMob 看型号、序列号、电池健康和 UDID
android·ios·小程序·https·uni-app·iphone·webview
茶底世界之下2 天前
iPhone Duo 适配实战,Awaking 踩过的 8 个坑
ios·swiftui·swift
跨境数据猎手2 天前
HTTP 响应体编码与压缩:识别、解码
网络协议·http·ios
也非非也2 天前
iPhone 中国区 AI 落地:Apple 与阿里千问合作的技术观察
大数据·人工智能·ios·agent·iphone·智子
茶底世界之下2 天前
同一片泳池,清透还是奶油胶片?用 Awaking 做两版成片
ios
2501_916008892 天前
iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程