0

最近在学习一些Mach-O相关的资料,注意到评论

当切片大于 4mb 或切片的偏移量大于 4mb 时,将使用 64 位 fat 文件格式。

'mach-o/fat.h'大约struct fat_acrh_64

我知道我们应该使用 的值fat_header.magic来决定使用fat_archfat_arch_64解析胖文件中的数据。

但我对评论感到困惑,为什么限制条件是4 Mbslice/offset评论中的意思是什么?

这是头文件的屏幕截图: 在此处输入图像描述

4

1 回答 1

1

评论是错误的,你可以在野外找到反例。
这是来自 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 可以表示的限制。

于 2021-01-15T21:18:44.193 回答