3 votes

Odd cputype dans le binaire /bin/ls

Je viens de commencer avec le Mac Hacker's Handbook de Charlie Miller et Dino Dai Zovi et je faisais les tutoriels. Cela inclut l'apprentissage de choses comme 'otool'.

otool -f \bin\ls
Fat headers
fat_magic 0xcafebabe
nfat_arch 2
architecture 0
    cputype 16777223
    cpusubtype 3
    capabilities 0x80
    offset 4096
    size 39600
    align 2^12 (4096)
architecture 1
    cputype 7
    cpusubtype 3
    capabilities 0x0
    offset 45056
    size 35632
    align 2^12 (4096)

J'ai essayé de trouver quelque chose à ce sujet d'abord cputype dans /usr/include/mach/machine.h, mais je n'ai rien trouvé. Il est clair qu'il me manque quelque chose.

8voto

Nip Points 362

cputype 16777223 est "x86 64" (mode 64 bits) ; 7 est "i386" (mode 32 bits). Incidemment, 16777223 == 0x1000007, donc le bit 24 signifie "64 bit".

Regarder à l'intérieur /usr/include/mach/machine.h (souligné par …/mach-o/fat.h ce qui semble être un point de départ raisonnable), nous trouvons ce qui suit :

typedef integer_t       cpu_type_t;

#define CPU_ARCH_ABI64  0x01000000              /* 64 bit ABI */

#define CPU_TYPE_X86            ((cpu_type_t) 7)
#define CPU_TYPE_I386           CPU_TYPE_X86            /* compatibility */
#define CPU_TYPE_X86_64         (CPU_TYPE_X86 | CPU_ARCH_ABI64)

#define CPU_TYPE_POWERPC                ((cpu_type_t) 18)
#define CPU_TYPE_POWERPC64              (CPU_TYPE_POWERPC | CPU_ARCH_ABI64)

Bien sûr, vous pouvez aussi simplement ajouter le -v à votre otool pour qu'il affiche les valeurs symboliques :

% otool -vf /bin/ls
Fat headers
fat_magic FAT_MAGIC
nfat_arch 2
architecture x86_64
    cputype CPU_TYPE_X86_64
    cpusubtype CPU_SUBTYPE_X86_64_ALL
    capabilities CPU_SUBTYPE_LIB64
    offset 4096
    size 39600
    align 2^12 (4096)
architecture i386
    cputype CPU_TYPE_I386
    cpusubtype CPU_SUBTYPE_I386_ALL
    capabilities 0x0
    offset 45056
    size 35632
    align 2^12 (4096)

0 votes

Merci beaucoup. J'ai complètement oublié les définitions avec les valeurs hexagonales en regardant le fichier. Merci encore pour l'indication concernant l'argument :-)

1voto

Petros Points 4430

D'après ce que je sais, les objets compilés en FORTRAN d'Intel utilisent un cputype de 16777223, mais les objets compilés par gcc utilisent un cputype de 7.

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