A MoonBit library for reading ELF object files
Dependencies
///|
test "readme quick start" {
let data = @fs.read_file_to_bytes("testdata/basic.x86_64")
let elf = @elf.ElfBytes::minimal_parse(data[:])
assert_true(elf.ehdr.class is ELF64)
assert_true(elf.ehdr.endianness is Little)
assert_eq(elf.ehdr.e_machine, @elf.EM_X86_64)
let text = match elf.section_header_by_name(".text") {
Some(shdr) => shdr
None => fail("expected .text section")
}
let (bytes, compression) = elf.section_data(text)
assert_true(bytes.length() > 0)
assert_true(compression is None)
}///|
test "readme common data" {
let data = @fs.read_file_to_bytes("testdata/symver.x86_64.so")
let elf = @elf.ElfBytes::minimal_parse(data[:])
let common = elf.find_common_data()
let dynsyms = match common.dynsyms {
Some(table) => table
None => fail("expected dynamic symbol table")
}
let dynstrs = match common.dynsyms_strs {
Some(table) => table
None => fail("expected dynamic symbol strings")
}
let hash = match common.sysv_hash {
Some(table) => table
None => fail("expected SysV hash table")
}
let (index, symbol) = match hash.find(b"memset"[:], dynsyms, dynstrs) {
Some(pair) => pair
None => fail("expected memset")
}
assert_eq(index, 2)
assert_eq(dynstrs.get(symbol.st_name.reinterpret_as_int()), "memset")
}| Area | Types and helpers |
|---|---|
| File header | ElfBytes, FileHeader, Class, Endian |
| Sections | SectionHeader, SectionHeaderTable, section_header_by_name, section_data* |
| Segments | ProgramHeader, SegmentTable, segment_data* |
| Symbols | Symbol, SymbolTable, symbol_table, dynamic_symbol_table |
| Dynamic linking | Dyn, DynamicTable, dynamic |
| Relocations | Rel, Rela, RelIterator, RelaIterator |
| Notes | Note, NoteGnuAbiTag, NoteGnuBuildId, NoteAny, NoteIterator |
| Hash tables | sysv_hash, gnu_hash, SysVHashTable, GnuHashTable |
| GNU versions | SymbolVersionTable, VersionIndex, VerDef*, VerNeed* |
| ABI constants | ET_*, EM_*, SHT_*, PT_*, DT_*, STB_*, STT_*, and related values |
This package contains over 1494 items.
A MoonBit library for reading ELF object files
Dependencies