美文网首页
iOS 解析命令:otool -

iOS 解析命令:otool -

作者: lukyy | 来源:发表于2025-03-06 14:30 被阅读0次
二进制文件Header(文件头)

包含文件的基本信息,如文件类型(可执行文件、动态库等)、CPU 架构(arm64、x86_64 等)、加载命令的数量等。
通过命令可以查看文件头信息。

otool -h <binary>  //查看文件头信息
//示例:
//假设你有一个 iOS App 的可执行文件 MyApp,路径为 /Users/username/MyApp.app/MyApp,你可以运行以下命令查看文件头信息:
otool -h /Users/username/MyApp.app/MyApp

otool -l <binary>  //查看加载命令
otool -L <binary>  //查看依赖的动态库
otool -tV <binary> //查看代码段的反汇编
otool -s __DATA __data <binary> //查看数据段的内容

otool -h 的作用

otool -h 用于显示 Mach-O 文件的文件头信息。文件头包含以下关键信息:

  • Magic Number:标识文件类型(如 MH_MAGIC_64 表示 64 位 Mach-O 文件)。
  • CPU Type:文件的 CPU 架构(如 ARM64、X86_64)。
  • File Type:文件类型(如可执行文件、动态库、目标文件等)。
  • Number of Load Commands:加载命令的数量。
  • Size of Load Commands:加载命令的总大小。
  • Flags:文件的标志位(如是否启用 PIE、是否剥离符号等)。

输出示例

运行 otool -h 后,你会看到类似以下的输出:

Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64  ARM64        ALL  0x00     EXECUTE    28       4048   NOUNDEFS DYLDLINK TWOLEVEL PIE
字段说明:
  • magic:文件的魔数,标识文件类型。例如:
    MH_MAGIC_64:64 位 Mach-O 文件(0xfeedfacf)
    MH_MAGIC:32 位 Mach-O 文件(0xfeedface)

  • cputype:CPU 架构。例如:
    ARM64:64 位 ARM 架构(iOS 设备:16777228 是 CPU_TYPE_ARM64 的值)。
    X86_64:64 位 Intel 架构(macOS 设备:CPU_TYPE_X86_64)。

  • cpusubtype:CPU 子类型,通常为 ALL(0:表示通用的 CPU 子类型(CPU_SUBTYPE_ARM64_ALL),适用于所有 ARM64 设备)

  • caps:CPU 特性标志,通常为 0x00。

  • filetype:文件类型。例如:
    MH_OBJECT:目标文件(值:1)
    EXECUTE:可执行文件(值:2)
    DYLIB:动态库(值:6)
    BUNDLE:插件或扩展(值:8)

  • ncmds:加载命令的数量。
    sizeofcmds:加载命令的总大小。

  • flags:文件的标志位。例如:(0x00218085:0x0 02 18 08 5)
    PIE:启用位置无关代码「0x00200000」(Position Independent Executable:表示文件支持地址空间随机化ASLR
    TWOLEVEL:使用两级命名空间「0x00018000」
    DYLDLINK:文件是一个动态链接的可执行文件「0x00000080」
    NOUNDEFS:文件中没有未定义的符号。「0x00000005」

具体案例

输出的内容如下:Mach header(对照以上说明,可以明白具体含义)

      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedfacf 16777228          0  0x00           2   119      11976 0x00218085 

相关文章

网友评论

      本文标题:iOS 解析命令:otool -

      本文链接:https://www.haomeiwen.com/subject/ujrrmjtx.html