/ bin / lsバイナリの奇数cputype


2

私はチャーリー・ミラーとディノ・ダイ・ゾヴィのマック・ハッカーのハンドブックから始めたばかりで、チュートリアルをやっていた。これには、「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でそのことについて何かを見つけようとしましたが、何も見つかりませんでした。明らかに私は何かが欠けています。

回答:


5

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)

どうもありがとう。ファイルを見るとき、16進値で定義を完全に見落としていました。引数についてのヒントをありがとう:-)
er4z0r

1

私が知る限り、インテルのFORTRANでコンパイルされたオブジェクトはcputype 16777223を使用しますが、gccでコンパイルされたオブジェクトは7のcputypeを使用します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.