Home mach-o
Post
Cancel

mach-o

Mach-O

文件类型、目标架构类型等

LoadCommands

描述文件在虚拟内存中的逻辑结构、布局

Raw segment data

__TEXT
__DATA

载进虚拟内存会变大

__LINKEDIT

虚拟内存中的布局

  • pagezero

​ arm64: 0x00 0x100000000(size)

​ armv7: 0x00 0x4000(size)

常见Mach-O文件类型

MH_OBJECT

目标文件(.o)

静态库文件(.a), 静态库其实就是N个.o合并在一起

MH_EXECUTE

可执行文件

MH_DYLID

动态库

.dylib

.framework/xxx

MH_DYLINKER

动态链接编辑器

/usr/lib/dyld

dyld用于家在以下类型的Mach-O文件

  • MH_EXECUTE
  • MH_DYLIB
  • MH_BUNDLE

MH_DSYM

存储着二进制文件符号信息的文件

.dSYM/Contents/Resources/DWARF/xxx(常用来分析APP的奔溃信息)

Universal Binary

同时适用于多种架构的二进制文件

包含了多种不同架构的独立的二进制文件

由于两种架构有共同的一些资源,所以不会达到单一架构版本的两倍之多

FreeBSG

Darwin

xnu

mac的内核

otool

1
2
3
4
5
6
# print fat headers
otool -f <mach-o>
# print header
otool -h <mach-o>
# print dylib used
otool -L <mach-o>

lipo

1
2
3
4
5
6
# 查看支持的架构
lipo -info <mach-o>
# 抽取出arm64架构的mach-o
lipo <mach-o> -thin arm64 -output <output-mach-o>
# 合并两种架构的mach-o
lipo -create <mach-o-armv7> <mach-o-arm64> -output <mach-o>

file

1
file <mach-o>

size

1
2
size --help
size -l -m -x <mach-o>

ASLR(Address Space Layout Randomization)

让Mach-O文件在虚拟内存中的起始地址随机

This post is licensed under CC BY 4.0 by the author.