0 votes

Otool ne montre qu'une seule architecture pour les binaires universels système dans macOS

Le fichier (outil cmd) montre que /bin/ls est un binaire universel sur macOS (Sonoma 14.2.1 sur Apple M1) et otool -f confirme cela:

% file /bin/ls
/bin/ls: binaire universel Mach-O avec 2 architectures: [x86_64:Exécutable 64-bit x86_64 Mach-O] [arm64e:Exécutable 64-bit arm64e Mach-O]
/bin/ls (pour l'architecture x86_64): Exécutable 64-bit x86_64 Mach-O
/bin/ls (pour l'architecture arm64e): Exécutable 64-bit arm64e Mach-O
% otool -f /bin/ls
En-têtes Fat
fat_magic 0xcafebabe
nfat_arch 2
architecture 0
    cputype 16777223
    cpusubtype 3
    capabilities 0x0
    offset 16384
    size 72896
    align 2^14 (16384)
architecture 1
    cputype 16777228
    cpusubtype 2
    capabilities 0x80
    offset 98304
    size 88816
    align 2^14 (16384)

Cependant, otool -h montre uniquement un en-tête Mach-O:

% otool -h /bin/ls
/bin/ls:
En-tête Mach
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedfacf 16777228          2  0x80           2    19       1728 0x00200085

Le même comportement peut être observé pour d'autres binaires dans le dossier /bin.

De manière intéressante, otool -h montre toutes les architectures pour les binaires universels faisant partie d'applications tierces (étant arm64, tandis que les binaires système sont arm64e). Exemple:

% otool -h /Applications/Firefox.app/Contents/MacOS/firefox 
/Applications/Firefox.app/Contents/MacOS/firefox (architecture x86_64):
En-tête Mach
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedfacf 16777223          3  0x80           2    21       1856 0x00210085
/Applications/Firefox.app/Contents/MacOS/firefox (architecture arm64):
En-tête Mach
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedfacf 16777228          0  0x00           2    22       1880 0x00210085

Pourquoi otool -h ne montre-t-il pas l'en-tête Mach-O x86_64 pour les binaires système (arm64e) alors qu'il le montre pour les binaires tiers (arm64)?

2voto

user43889 Points 266

Consultez cette question datant de près de 10 ans https://stackoverflow.com/questions/27354315/what-is-the-difference-between-mach-headers-and-fat-headers concernant les en-têtes mach et fat.

Je crois qu'elle est toujours correcte et que vous avez besoin de :

otool -h -arch all /bin/ls

ou (meilleur car il décode certains éléments):

otool -hV -arch all /bin/ls

pour obtenir :

/bin/ls (architecture x86_64):
Mach en-tête
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64   X86_64        ALL  0x00     EXECUTE    18       1816   NOUNDEFS DYLDLINK TWOLEVEL PIE
/bin/ls (architecture arm64e):
Mach en-tête
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64    ARM64         E USR00     EXECUTE    19       1728   NOUNDEFS DYLDLINK TWOLEVEL PIE

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X