LF OS
Hobby operating system for amd64 with high ambitions
|
Go to the source code of this file.
Data Structures | |
struct | elf_file_header |
Header of ELF images. More... | |
struct | elf_program_header |
Program headers in ELF images, required for preparing a program for execution. More... | |
struct | elf_section_header |
Section headers in ELF images, required to read additional information from file. More... | |
struct | elf_symbol |
Symbols in ELF images, there may be many. More... | |
Macros | |
#define | ELF_MAGIC 0x464c457f |
Typedefs | |
typedef struct elf_file_header | elf_file_header_t |
typedef struct elf_program_header | elf_program_header_t |
typedef struct elf_section_header | elf_section_header_t |
typedef struct elf_symbol | elf_symbol_t |
Functions | |
struct elf_file_header | __attribute__ ((packed)) |
ptr_t | load_elf (ptr_t elf, struct vm_table *context, ptr_t *data_start, ptr_t *data_end) |
elf_section_header_t * | elf_section_by_name (const char *name, const void *elf) |
void * | elf_load_symbols (ptr_t elf, allocator_t *alloc) |
bool | elf_symbolize (void *symbols, ptr_t addr, size_t *symbol_length, char *symbol) |
struct elf_file_header |
Data Fields | ||
---|---|---|
uint8_t | _ident_padding[7] | |
ptr_t | entrypoint | |
uint32_t | flags | |
uint16_t | headerSize | |
uint8_t | ident_abi | |
uint8_t | ident_abi_version | |
uint8_t | ident_arch | |
uint8_t | ident_byteOrder | |
uint32_t | ident_magic | |
uint8_t | ident_version | |
uint16_t | machine | |
uint16_t | programHeaderCount | |
uint16_t | programHeaderEntrySize | |
ptr_t | programHeaderOffset | |
uint16_t | sectionHeaderCount | |
uint16_t | sectionHeaderEntrySize | |
ptr_t | sectionHeaderOffset | |
uint16_t | sectionHeaderSectionNameIndex | |
uint16_t | type | |
uint32_t | version |
struct elf_program_header |
struct elf_section_header |
struct elf_symbol |
typedef struct elf_file_header elf_file_header_t |
typedef struct elf_program_header elf_program_header_t |
typedef struct elf_section_header elf_section_header_t |
typedef struct elf_symbol elf_symbol_t |
struct elf_file_header __attribute__ | ( | (packed) | ) |
void * elf_load_symbols | ( | ptr_t | elf, |
allocator_t * | alloc | ||
) |
Load symbols of the provided ELF file.
elf | ELF file already loaded into memory |
alloc | Allocator to use for dynamically allocating memory |
Definition at line 101 of file elf.c.
References elf_symbol::addr, Symbol::address, allocator::alloc, alloc, elf_section_by_name(), elf_section_header::entrySize, header, logw, memcpy(), Symbol::name, elf_symbol::name, SymbolData::numSymbols, elf_section_header::offset, and elf_section_header::size.
elf_section_header_t * elf_section_by_name | ( | const char * | name, |
const void * | elf | ||
) |
Return section header of ELF file by name
name | Name of the section to return |
elf | Loaded ELF image in memory |
Definition at line 71 of file elf.c.
References name, elf_section_header::name, elf_section_header::offset, elf_file_header::sectionHeaderCount, elf_file_header::sectionHeaderEntrySize, elf_file_header::sectionHeaderOffset, elf_file_header::sectionHeaderSectionNameIndex, and strcmp().
Get the symbol name (and offset) for a given address from the data loaded with elf_load_symbols.
symbols | Opaque data structure returned by elf_load_symbols |
addr | Address to symbolize |
symbol_length | Input for size of the buffer where to write symbol, output actual size of either the data written into the buffer or the size needed for the buffer |
symbol | Output buffer where to write the symbol |
Definition at line 133 of file elf.c.
References addr, Symbol::address, ksnprintf(), Symbol::name, SymbolData::numSymbols, strlen(), strncpy(), SymbolData::symbolNames, and SymbolData::symbols.
Parse ELF file, map program segments to context and return proper location for stack.
[in] | elf | Memory chunk where the ELF file is loaded. |
[in] | context | VM context for mapping of program segments. |
[out] | data_start | Start of the data section |
[out] | data_end | End of the data section |
Definition at line 7 of file elf.c.
References ALLOCATOR_REGION_DIRECT_MAPPING, data_end, ELF_MAGIC, fileLength, elf_program_header::fileLength, header, logf, memcpy(), elf_program_header::memLength, memset(), mm_alloc_pages(), offset, elf_program_header::offset, elf_program_header::type, elf_program_header::vaddr, and vm_context_map().