В 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: Если вы не хотите писать свои собственные двоичные исполняемые файлы или анализировать дампы ядра вручную, вам не нужно это знать.