방금 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에서 처음 으로 무언가를 찾으려고 했지만 아무것도 찾지 못했습니다. 분명히 뭔가 빠졌습니다.
답변
cputype
16777223은 “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을 사용합니다.