/ bin / ls 이진의 홀수 CPU 유형 cputype 16777223

방금 Charlie Miller와 Dino Dai Zovi의 Mac Hacker ‘s Handbook으로 시작하여 튜토리얼을 진행했습니다. 여기에는 ‘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)

나는 cputype/usr/include/mach/machine.h에서 처음 으로 무언가를 찾으려고 했지만 아무것도 찾지 못했습니다. 분명히 뭔가 빠졌습니다.



답변

cputype16777223은 “x86 64″(64 비트 모드)입니다. 7은 “i386″(32 비트 모드)입니다. 또한 16777223 == 0x1000007이므로 비트 24는 “64 비트”를 의미합니다.

시작하기에 합리적 인 것처럼 보이는 /usr/include/mach/machine.h(으로 지적 됨)을 살펴보면 …/mach-o/fat.h다음을 찾을 수 있습니다.

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

물론 명령에 -v옵션을 추가 otool하여 기호 값을 표시 할 수도 있습니다.

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

답변

내가 알 수있는 한 인텔 FORTRAN 컴파일 객체는 cputype 16777223을 사용하지만 gcc 컴파일 객체는 cputype 7을 사용합니다.