以下は実行ファイルのヘッダ部分です。
7F 45 4C 46 02 01 01 03 00 00 00 00 00 00 00 00 02 00 3E 00 01 00 00 00
6E 0E 40 00
typedef struct elf64_hdr {
unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" /
Elf64_Half e_type;
Elf64_Half e_machine;
Elf64_Word e_version;
Elf64_Addr e_entry; / Entry point virtual address */
...
magic numberは #define EI_NIDENT 16 なので
7F 45 4C 46 02 01 01 03 00 00 00 00 00 00 00 00 の部分に相当します。
e_type は 02 00
e_machine は 3E 00
e_version は 01 00 00 00
e_entry は 6E 0E 40 00
となっているんですが・・・・
ここで何故1つの構造体のメンバ変数によってバイト数がバラバラなのでしょうか??
e_typeは2バイトで e_versionは4バイトになっています。
普通はchar = 8bitみたいに固定ですよね??
細かいところなんですが、疑問になりました。
環境はLinux 64bitです。
それと、e_machine の 3E 00 は 10進数で62になります。
定義を見ると
.#define EM_X86_64 62 /* AMD x86-64 */
のようになっていました。
自分はIntelを使用しているのですが、何故AMD x86-64になっているのでしょうか??
一応仮想マシン上で動かしているのですが・・・・
AMDは使用していません。
どなたか教えてください!
追記
すいません。
メンバ変数がバラバラになっている理由はわかりました。
typedef __u64 Elf64_Addr;
typedef __u16 Elf64_Half;
typedef __s16 Elf64_SHalf;
typedef __u64 Elf64_Off;
typedef __s32 Elf64_Sword;
typedef __u32 Elf64_Word;
typedef __u64 Elf64_Xword;
typedef __s64 Elf64_Sxword;
このような定義を見つけました。
AMDになっている理由は未だわかりませんが・・・・
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/15 02:52