【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]
相关推荐
itme26819 分钟前
解决cocos 2dx/creator2.4在ios18下openURL无法调用的问题
macos·objective-c·cocoa
明月看潮生2 小时前
青少年编程与数学 01-011 系统软件简介 07 iOS操作系统
ios·青少年编程·操作系统·系统软件
90后的晨仔4 小时前
RxSwift 框架解析
前端·ios
qq_279456156 小时前
CADisplayLink、NSTimer、GCD定时器
macos·objective-c·cocoa
可爱小仙子8 小时前
ios苹果系统,js 滑动屏幕、锚定无效
前端·javascript·ios
未来猫咪花9 小时前
# Flutter状态管理对比:view_model vs Riverpod
flutter·ios·android studio
咕噜企业签名分发-淼淼13 小时前
开发源码搭建一码双端应用分发平台教程:逐步分析注意事项
android·ios
键盘敲没电1 天前
【IOS】GCD学习
学习·ios·objective-c·xcode
SY.ZHOU1 天前
Significant Location Change
macos·ios·cocoa
吴Wu涛涛涛涛涛Tao1 天前
深入理解 Swift Codable:从基础到进阶
ios