9、MachO简介

news2025/1/18 11:49:56

一、MachO文件

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

二、MachO文件结构

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

2.1 属于MachO格式的常见文件

    • 目标文件 .o
    • 库文件
      • .a
      • .dylib
      • Framework
    • 可执行文件
    • dyld
    • .dsym
  • File指令
    • 通过 $file 文件路径 查看文件类型

2.2 通用二进制文件(Universal binary)

  • 苹果公司提出的一种程序代码.能同时适用多种架构的二进制文件
  • 同一个程序包中同时为多种架构提供最理想的性能
  • 因为需要存储多种代码,通用二进制应用程序通常比单一平台二进制的程序更大.
  • 但是 由于两种架构有共通的非执行资源(代码以外的),所以并不会达到单一版本的两倍之多.
  • 而且由于执行中只调用一部分代码,运行起来也不需要额外的内存.

2.3 lipo命令

  • 使用lipo -info 可以查看MachO文件包含的架构
    • lipo -info MachO文件
  • 使用 lipo -thin 拆分某种架构
    • lipo MachO文件 -thin架构 -output输出文件路径
  • 使用lipo -create 合并多种架构
    • lipo -create MachO1 MachO2 -output 输出文件路径

2.4 MachO文件结构

MachO的组成结构如图所示包括了

  • Header : 包含二进制文件的一般信息
    • 字节顺序、架构类型、加载指令的数量等
    • 使得可以快速确认一些信息,比如当前文件用于32位还是64位,对应的处理器是什么、文件类型是什么.
  • Load Commands 一张包含很多内容的表
    • 内容包括区域的位置、符号表、动态符号表等.
  • Data通常是MachO文件中最大的部分
    • 包含Segment的具体数据

2.4.1 Header的数据结构

#import <mach-o/loader.h>
/*
 * The 64-bit mach header appears at the very beginning of object files for
 * 64-bit architectures.
 */
struct mach_header_64 {
    uint32_t    magic;        /* mach magic number identifier */
    int32_t        cputype;    /* cpu specifier */
    int32_t        cpusubtype;    /* machine specifier */
    uint32_t    filetype;    /* type of file */
    uint32_t    ncmds;        /* number of load commands */
    uint32_t    sizeofcmds;    /* the size of all the load commands */
    uint32_t    flags;        /* flags */
    uint32_t    reserved;    /* reserved */
};
  • magic: 魔数,快速定位属于64还是32位
  • cputype: CPU类型,比如ARM
  • cpusubtype: CPU的具体类型 arm64/ armv7
  • filetype: 文件类型,比如可执行文件
  • ncmds: loadCommands条数
  • sizeofcmds LoadCommands的大小
  • flags 标志位标识二进制文件支持的功能. 主要是和系统加载、链接有关
  • reserved 保留字段

2.4.2 虚拟内存

VM Addr : 虚拟内存地址

VM Size: 虚拟内存大小

File offset: 数据在文件中偏移量

File size: 数据在文件中的大小

2.4.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_SIGANTURE

代码签名

三、DYLD

dyld(the dynamic link editor)是苹果的动态链接器,是苹果操作系统一个重要组成部分,在系统内核做好程序准备工作之后,交由dyld负责余下的工作.

四、总结

  • MachO属于一种文件格式
    • 包含: 可执行文件、静态库、动态库、dyld等等
    • 可执行文件:
      • 通用二进制文件: 集合了多种架构
      • lipo命令
        • -thin拆分架构
        • -create 合并架构
  • MachO结构
    • Header
      • 用于快速确定该文件的CPU类型、文件类型
    • Load Commands
      • 指示加载器如何设置并且加载二进制数据
    • Data
      • 存放数据: 代码、数据、字符串常量、类、方法等等

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fileclude(文件包含漏洞及php://input、php://filter的使用)

先介绍一些知识 1、文件包含漏洞 和SQL注入等攻击方式一样&#xff0c;文件包含漏洞也是一种注入型漏洞&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务端执行。 什么叫包含呢&#xff1f;以PHP为例&#xff0c;我们常常把可重复使用的函数写…

Pytorch实现FCN图像语义分割网络

针对图像的语义分割网络&#xff0c;本节将介绍PyTorch中已经预训练好网络的使用方式&#xff0c;然后使用VOC2012数据集训练一个FCN语义分割网络。 一、使用预训练好的语义分割网络 PyTorch提供了已预训练好的图像语义分割网络&#xff0c;已经预训练好的可供使用的网络模型…

Java 对象的创建过程面试总结

Java对象创建的过程 Java对象创建的过程主要分为五个步骤&#xff0c;下面我将详细介绍这五个步骤。 Step1:类加载检查 虚拟机遇到一条new指令时&#xff0c;首先会去检查这个指令的参数是否能在class文件中的常量池中定位到这个类的符号引用&#xff0c;并且会检查这个符号…

unplugin-vue-components 源码原理分析

unplugin-vue-components 是一款按需自动导入Vue组件的库。支持 Vue2 和 Vue3&#xff0c;同时支持组件和指令。使用此插件库后&#xff0c;不再需要手动导入组件&#xff0c;插件会自动识别按需导入组件以及对应样式&#xff0c;我们只需要像全局组件那样使用即可。 当然上面…

深入谈谈内存压缩那些事!

1. 技术背景 说到压缩这个词&#xff0c;我们并不陌生&#xff0c;应该都能想到是降低占用空间&#xff0c;使同样的空间可以存放更多的东西&#xff0c;类似于我们平时常用的文件压缩,内存压缩同样也是为了节省内存。 尽管当前android手机6GB&#xff0c;8GB甚至12GB的机器都…

两个月15斤以上的健康减脂减重法,与饥饿、运动等无关的自我实验的验证方法(第六篇完结,无收费内容)...

阅读本文前请先看前五篇内容&#xff0c;本文有部分修改&#xff0c;但是涉及前五篇的内容会大量隐藏&#xff0c;只保留关联修改部分&#xff0c;链接如下&#xff1a; 两个月15斤以上的健康减脂减重法&#xff0c;与饥饿、运动等无关的自我实验的验证方法&#xff08;第五篇&…

OpenCascade安装编译

重新编译OpenCascade&#xff0c;在漫长的等待过程中&#xff0c;记录一下编译的流程 下载安装 OpenCascade官网中提供了直接安装的二进制版本&#xff0c;如果只是简单的使用需求可以直接下载安装&#xff0c;二进制版本使用VC 2017 64 bit编译 官网地址 源码编译 源码编…

Docker容器:docker基础

目录 一、docker容器简介 1、什么是容器 2、容器的优点 3、什么是docker容器 4、docker的logo及设计宗旨 5、docker与虚拟机对比 6、docker容器2个重要技术 7、docker三大核心概念 二、docker的安装及管理 1、安装docker 2、配置docker加速器 3、docker镜像相关基础…

你为什么从上一家公司离职?程序员这样回答最机智

想必每一位跳槽的程序员伙伴&#xff0c;在面试时都会被问到这个问题吧&#xff1a; “为什么从上一家公司离职&#xff1f;” 可能不少人跳槽的原因都是钱少事多离家远&#xff0c;加班干到十二点&#xff0c;同事之间还内卷&#xff0c;但是这些原因在面试的时候都能说吗&a…

软件测试培训

软件测试培训 软件测试培训是一门针对软件测试人才培养的技术&#xff0c;培训内容涉及到&#xff1a;软件测试基础、自动化测试、性能测试、安全测试、接口测试、云计算测试等。就业方向&#xff1a;软件开发工程师&#xff0c;软件测试工程师&#xff0c; web前端工程师&…

Docker概念|容器|镜像|命令详细(创建,删除,修改,添加)

Docker概念|容器|镜像|命令详细&#xff08;创建&#xff0c;删除&#xff0c;修改&#xff0c;添加&#xff09; 一&#xff0c;Docker简介二&#xff0c;Docker与虚拟机的区别三&#xff0c;容器核心技术四&#xff0c;Docker核心概念五 docker的安装5.1关闭防火墙,关闭文件防…

2022年 团体程序设计天梯赛——题解集

Hello各位童学大家好&#xff01;&#x1f60a;&#x1f60a;&#xff0c;茫茫题海你我相遇即是缘分呐&#xff0c;或许日复一日的刷题已经让你感到疲惫甚至厌倦了&#xff0c;但是我们真的真的已经达到了我们自身极限了吗&#xff1f;少一点自我感动&#xff0c;没有结果前别太…

大悦城中粮物业:用二维码搭建物业系统,“多快好省”提高管理效率

中粮物业&#xff08;大悦服务&#xff09;隶属于大悦城控股集团股份有限公司&#xff0c;成立于1993年6月&#xff0c;是中国物业管理协会会员单位、广东省物业管理行业协会常务理事单位。 作为连续多年蝉联“中国物业服务百强企业”的头部物业公司&#xff0c;中粮物业自主研…

OMRON Sysmac Studio如何将PDO参数复制到其他轴

Sysmac Studio如何将PDO参数复制到其他轴 实验时间&#xff1a;2023/4/19 实验设备&#xff1a;Sysmac Studio(ver 1.53)、EveryThing搜索工具 实验目的&#xff1a;将轴分配的PDO参数复制到其他轴 一. 实验概述 ​ 当PLC当很多相同的伺服轴时&#xff0c;轴的PDO映射是完全…

ESP32在ESP-IDF框架下使用LVGL(v8.3)

开发环境 VSCodeESP-IDF插件 说明&#xff1a;IDF版本为4.4.4&#xff0c;最新版的5.0.1弃用了些东西&#xff0c;而lvgl_esp32_drivers对5以上的版本未适配&#xff0c;所以不建议使用5以上的版本。 安装&#xff1a;安装教程&#xff0c;建议整体看完在进行安装&#xff0c;以…

解决vue-print-nb打印时多出一页空白,vue-print-nb打印有空白页

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 打印table表格&#xff0c;需要用到vue-print-nb插件&#xff0c;使用该插件可以一键弹窗打印页面 效果如图 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 查了一下&#xff…

斩获“双金”!玻色量子在中国移动第七届创客马拉松大赛脱颖而出

​4月7日&#xff0c;中国移动第七届创客马拉松大赛总决赛在厦门圆满落幕。此次大赛以“能力无界 智算同行”为主题&#xff0c;经过近4000个创新项目的层层选拔&#xff0c;玻色量子凭借“相干量子计算设备”项目脱颖而出&#xff0c;成功摘取“双金”&#xff1a;总决赛全球通…

Qt5.12实战之菜单栏工具栏与状态栏使用

演示效果: 1.widget工程创建 2.ui设计 双击打开下图所示的.ui文件 菜单设计: 添加子菜单 修改QMenu及QAction对象名称为可识别名 具体修改操作如下: QMenu和QAction类似 在QAction列表中修改QAction对象 具体修改方法如下: 为QAction也就是菜单项目添加点击事件处理: 选择信号…

公网远程访问连接Minecraft我的世界服务器 - MCSM控制面板

文章目录 概述1.MCSManager 安装2.内网穿透2.1 安装cpolar内网穿透 3. 访问公网地址4.固定公网地址4.1 保留一个二级子域名4.2 配置固定二级域名4.3 访问固定公网地址 5. 设置节点公网地址6. 固定节点公网地址6.1 保留一个固定tcp地址6.2 配置固定TCP地址 概述 MCSManager 是一…

After Effects 2022(AE 2022)forMac/win图文安装教程

After Effects简称“AE”是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。属于层类型后期软件。可以帮助您高效且精确地创建无数种引人注目的动态图形和震撼人心…