mirror of
https://github.com/sgmarz/osblog.git
synced 2024-11-24 02:16:19 +04:00
Added ELF structures for reading ELF files.
This commit is contained in:
parent
06894d3aff
commit
de97ebf12d
60
risc_v/src/elf.rs
Executable file
60
risc_v/src/elf.rs
Executable file
@ -0,0 +1,60 @@
|
||||
// elf.rs
|
||||
// Routines for reading and parsing ELF
|
||||
// (Executable and Linkable Format) files.
|
||||
// 26-April-2020
|
||||
// Stephen Marz
|
||||
|
||||
|
||||
// Every ELF file starts with ELF "magic", which is a sequence of four bytes 0x7f followed by capital ELF, which is 0x45, 0x4c, and 0x46 respectively.
|
||||
pub const MAGIC: u32 = 0x464c_457f;
|
||||
|
||||
/// The ELF header contains information about placement and numbers of the important sections within our file.
|
||||
#[repr(C)]
|
||||
pub struct Header {
|
||||
pub magic: u32,
|
||||
pub bitsize: u8,
|
||||
pub endian: u8,
|
||||
pub ident_abi_version: u8,
|
||||
pub target_platform: u8,
|
||||
pub abi_version: u8,
|
||||
pub padding: [u8; 7],
|
||||
pub obj_type: u16,
|
||||
pub machine: u16, // 0xf3 for RISC-V
|
||||
pub version: u32,
|
||||
pub entry_addr: usize,
|
||||
pub phoff: usize,
|
||||
pub shoff: usize,
|
||||
pub flags: u32,
|
||||
pub ehsize: u16,
|
||||
pub phentsize: u16,
|
||||
pub phnum: u16,
|
||||
pub shentsize: u16,
|
||||
pub shnum: u16,
|
||||
pub shstrndx: u16,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct ProgramHeader {
|
||||
pub seg_type: u32,
|
||||
pub flags: u32,
|
||||
pub off: usize,
|
||||
pub vaddr: usize,
|
||||
pub paddr: usize,
|
||||
pub filesz: usize,
|
||||
pub memsz: usize,
|
||||
pub align: usize,
|
||||
}
|
||||
|
||||
pub const TYPE_EXEC: u16 = 2;
|
||||
|
||||
pub const PROG_READ: u8 = 4;
|
||||
pub const PROG_WRITE: u8 = 2;
|
||||
pub const PROG_EXECUTE: u8 = 1;
|
||||
|
||||
pub const MACHINE_RISCV: u16 = 0xf3;
|
||||
pub const PH_SEG_TYPE_NULL: u32 = 0;
|
||||
pub const PH_SEG_TYPE_LOAD: u32 = 1;
|
||||
pub const PH_SEG_TYPE_DYNAMIC: u32 = 2;
|
||||
pub const PH_SEG_TYPE_INTERP: u32 = 3;
|
||||
pub const PH_SEG_TYPE_NOTE: u32 = 4;
|
||||
|
Loading…
Reference in New Issue
Block a user