В Linux, что это за объекты elf.h?

Из elf.h в c (Linux):

#include <elf.h>

Что обозначают / делают следующие указатели? Я попытался найти документацию, но там ничего не написано. Я только что видел некоторый исходный код от других людей, использующих его для реализации загрузчика ELF:

Elf32_Ehdr
Elf32_Phdr
Elf32_Shdr
Elf32_Sym

Спасибо!

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

ELF - это очень общий формат для двоичных файлов (например, исполняемые файлы, дампы ядра). Вы можете прочитать его спецификацию в виде ссылки из статьи в Википедии.

После того, как вы поймете, как выглядит формат, вы узнаете о заголовке ELF, заголовках программ, заголовках разделов и многом другом. elf.h Заголовочный файл определяет структуры C, которые соответствуют тем частям структуры ELF. Вы можете использовать их, чтобы написать свои собственные файлы ELF или загрузить существующие.

tl; dr: Если вы не хотите писать свои собственные двоичные исполняемые файлы или анализировать дампы ядра вручную, вам не нужно это знать.

Другие вопросы по тегам