MachO

MachOView

一、MachO文件

Mach-O其实是Mach Object文件格式的缩写,是mac以及iOS上可执行文件的格式, 类似于windows上的PE格式 (Portable Executable ), linux上的elf格式 (Executable and Linking Format)

1、Mach-O文件格式
  • Mach-OMach object文件格式的缩写,它是一种用于可执行文件、目标代码、动态库的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性。

  • 属于MachO格式的常见文件
    目标文件.o
    库文件:.a、.dylib、Framework
    可执行文件
    dyld
    .dsym

  • File指令
    通过 $file 文件路径 查看文件类型

2、通用二进制文件(Universal binary
  • 苹果公司提出的一种程序代码。能同时适用多种架构的二进制文件
  • 同一个程序包中同时为多种架构提供最理想的性能。
  • 因为需要储存多种代码,通用二进制应用程序通常比单一平台二进制的程序要大。
  • 但是 由于两种架构有共通的非执行资源,所以并不会达到单一版本的两倍之多。
  • 而且由于执行中只调用一部分代码,运行起来也不需要额外的内存。
3、lipo命令
  • 使用lifo -info 可以查看MachO文件包含的架构
    $lipo -info MachO文件

  • 使用lifo –thin 拆分某种架构
    $lipo MachO文件 –thin 架构 –output 输出文件路径。eg:lipo Demo -thin armv7 -output mach_armv7

  • 使用lipo -create 合并多种架构
    $lipo -create MachO1 MachO2 -output 输出文件路径。eg:lipo -create mach_armv7 mach_arm64e mach_armv7s -output mach_DYZ

二、MachO文件结构

因为MachO文件本身是一种文件格式,所以我们一定需要了解其文件内部结构。

1、MachO文件结构

Mach-O 的组成结构如图所示包括了

  • 1⃣️、Header 包含该二进制文件的一般信息
    • 字节顺序、架构类型、加载指令的数量等。
    • 使得可以快速确认一些信息,比如当前文件用于32位还是64位,对应的处理器是什么、文件类型是什么
  • 2⃣️、Load commands 一张包含很多内容的表
    • 内容包括区域的位置、符号表、动态符号表等。
  • 3⃣️、Data 通常是对象文件中最大的部分
    • 包含Segement的具体数据
2、Header的数据结构
  • command + shift + o 搜索类
3、LoadCommands
  • LC_SEGMENT_64:将文件中(32位或64位)的段映射到进程地址空间中
  • LC_DYLD_INFO_ONLY:动态链接相关信息
  • LC_SYMTAB:符号地址
  • LC_DYSYMTAB:动态符号表地址
  • LC_LOAD_DYLINKER:使用谁加载,我们使用dyld
  • LC_UUID:文件的UUID
  • LC_VERSION_MIN_MACOSX:支持最低的操作系统版本
  • LC_SOURCE_VERSION:源代码版本
  • LC_MAIN:设置程序主线程的入口地址和栈大小
  • LC_LOAD_DYLIB:依赖库的路径,包含三方库
  • LC_FUNCTION_STARTS:函数起始地址表
  • LC_CODE_SIGNATURE:代码签名

三、操作

  • vi test.c

  • clang -c test.c 编译一下,会出现一个test.o(目标文件)文件

  • file test.o 查看

  • clang test.o 链接 test.o,会出现一个a.out(可执行文件)文件

  • clang -o abc test.c 编译并链接,生成一个abc的可执行文件(黑框框)
    clang test.o -o abc 目标文件生成可执行文件(黑框框)

  • ./abc ./执行

  • find / -name "*.a" 根目录下查找.a文件

  • find / -name "*.dylib" 根目录下查找.dylib文件

  • 看出dSYM

  • 编译的是生成的是可执行文件
  • relase版本 iOS11以下的,显示包内容里面的可执行文件会生成多架构的(是因为Build Settings,中的Build Active Architecture Only 为No)
  • arm64、arm64e都是64位的,armv7、armv7s都是32位的
  • 添加了啥编译的时候就可以编译出来啥,前提是iOS11以下(因为iOS11开始不支持32位,所以armv7、armv7s将会编译不过)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容