在Linux中,这些elf.h对象是什么?

时间:2013-10-30 21:24:34

标签: c linux kernel executable elf

来自c(Linux)中的elf.h:

#include <elf.h>

以下指针代表什么/做什么?我试着查看文档,但没有任何关于它的文章。我刚刚看到其他人使用它来实现ELF加载器的一些源代码:

Elf32_Ehdr
Elf32_Phdr
Elf32_Shdr
Elf32_Sym

谢谢!

2 个答案:

答案 0 :(得分:2)

他们只是带有大量信息的结构。例如,Elf32_Ehdr定义如下:

typedef struct {
    unsigned char   e_ident[EI_NIDENT]; /* ident bytes */
    Elf32_Half  e_type;         /* file type */
    Elf32_Half  e_machine;      /* target machine */
    Elf32_Word  e_version;      /* file version */
    Elf32_Addr  e_entry;        /* start address */
    Elf32_Off   e_phoff;        /* phdr file offset */
    Elf32_Off   e_shoff;        /* shdr file offset */
    Elf32_Word  e_flags;        /* file flags */
    Elf32_Half  e_ehsize;       /* sizeof ehdr */
    Elf32_Half  e_phentsize;        /* sizeof phdr */
    Elf32_Half  e_phnum;        /* number phdrs */
    Elf32_Half  e_shentsize;        /* sizeof shdr */
    Elf32_Half  e_shnum;        /* number shdrs */
    Elf32_Half  e_shstrndx;     /* shdr string index */
} Elf32_Ehdr;

您可以在此处找到所有定义的内容:

http://www.opensource.apple.com/source/dtrace/dtrace-78/sys/elf.h

答案 1 :(得分:1)

ELF是二进制文件(例如可执行文件,核心转储)的一种非常通用的格式。您可以阅读its specification链接的Wikipedia article

在了解格式的外观后,您将了解ELF标题,程序标题,节标题等等。 elf.h头文件定义了与ELF结构的那些部分匹配的C结构。您可以使用它们编写自己的ELF文件或加载现有文件。

tl; dr:如果您不想编写自己的二进制可执行文件或手动解析核心转储,则无需知道这一点。