Cpod oggetto dispari in / bin / ls binario

2

Ho appena iniziato con Charlie Miller e il manuale di Mac Hacker di Dino Dai Zovi e stavo facendo i tutorial. Ciò include conoscere cose come "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)

Ho provato a trovare qualcosa su quel primo cputype in /usr/include/mach/machine.h, ma non ho trovato nulla. Chiaramente mi manca qualcosa.

    
posta er4z0r 04.02.2011 - 21:27
fonte

2 risposte

4

cputype 16777223 è "x86 64" (modalità 64 bit); 7 è "i386" (modalità a 32 bit). Per inciso, 16777223 == 0x1000007, quindi il bit 24 significa "64 bit".

Guardando in /usr/include/mach/machine.h (sottolineato da …/mach-o/fat.h , che sembra un punto di partenza ragionevole), troviamo quanto segue:

⋮
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)
⋮

Ovviamente puoi anche aggiungere l'opzione -v al tuo comando otool per far sì che mostri i valori simbolici:

% 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)
    
risposta data 05.02.2011 - 05:32
fonte
1

Per quanto posso capire, gli oggetti compilati da FORTRAN intel usano un cputype 16777223 ma gli oggetti compilati da gcc usano un cputype di 7

    
risposta data 04.02.2011 - 22:35
fonte

Leggi altre domande sui tag