使用file命令显示动态链接库将产生以下结果:
#/usr/lib x32 $ file ./lib 32/libgomp.so.1.0.0
./lib 32/libgomp.so.1.0.0: El f32-bitlsbsharedobject,Intel 80386,version1(sysv ),dynamically linked,bu
# :/usr/lib x32 $ file ./lib x32/libgcc _ s.so.1
./lib x32/libgcc _ s.so.1: El f32-bitlsbsharedobject,x86-64,version1(sysv ),dynamically linked,buid
其中让我困惑的赤字部分
elf32比特指示该elf文件是elf32的,并且ELF64比特指示该elf文件是ELF64的
typedef struct elf32_hdr {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;/*输入点* /
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;
typedef struct elf64_hdr {
unsigned char e_ident[16]; /* ELF 'magic number' */
Elf64_Half e_type;
Elf64_Half e_machine;
Elf64_Word e_version;
Elf64_Addr e_entry;/*输入点虚拟地址* /
Elf64_Off e_phoff;/* programheadertablefileoffset * /
Elf64_Off e_shoff;/* sectionheadertablefileoffset * /
Elf64_Word e_flags;
Elf64_Half e_ehsize;
Elf64_Half e_phentsize;
Elf64_Half e_phnum;
Elf64_Half e_shentsize;
Elf64_Half e_shnum;
Elf64_Half e_shstrndx;
} Elf64_Ehdr;
对于elf32和elf64标头,前16个字节是幻像,幻像的第五个字节定义elf文件的格式。
Intel 80386和x86-64定义了目标计算机的类型,即目标计算机的指令集