最近在学习一些Mach-O相关的资料,注意到评论
当切片大于 4mb 或切片的偏移量大于 4mb 时,将使用 64 位 fat 文件格式。
在'mach-o/fat.h'
大约struct fat_acrh_64
我知道我们应该使用 的值fat_header.magic
来决定使用fat_arch
或fat_arch_64
解析胖文件中的数据。
但我对评论感到困惑,为什么限制条件是4 Mb
,slice/offset
评论中的意思是什么?
最近在学习一些Mach-O相关的资料,注意到评论
当切片大于 4mb 或切片的偏移量大于 4mb 时,将使用 64 位 fat 文件格式。
在'mach-o/fat.h'
大约struct fat_acrh_64
我知道我们应该使用 的值fat_header.magic
来决定使用fat_arch
或fat_arch_64
解析胖文件中的数据。
但我对评论感到困惑,为什么限制条件是4 Mb
,slice/offset
评论中的意思是什么?
评论是错误的,你可以在野外找到反例。
这是来自 M1 Mac:
% otool -f /usr/sbin/php-fpm
Fat headers
fat_magic 0xcafebabe
nfat_arch 2
architecture 0
cputype 16777223
cpusubtype 3
capabilities 0x0
offset 16384
size 14061120
align 2^14 (16384)
architecture 1
cputype 16777228
cpusubtype 2
capabilities 0x80
offset 14090240
size 14110192
align 2^15 (32768)
如您所见,大小和偏移量都超过了 14MB。
一个合理的猜测是它们的意思是 4GB,这是 uint32 可以表示的限制。