#elf64

no-std elf_rs

A simple no_std ELF file reader for ELF32 and ELF64

7 releases

0.3.1 Oct 13, 2023
0.3.0 Jan 16, 2023
0.2.0 Dec 8, 2021
0.1.3 May 30, 2020
0.1.0 Apr 3, 2019

#120 in Operating systems

Download history 514/week @ 2024-12-08 382/week @ 2024-12-15 234/week @ 2024-12-22 352/week @ 2024-12-29 180/week @ 2025-01-05 246/week @ 2025-01-12 132/week @ 2025-01-19 145/week @ 2025-01-26 377/week @ 2025-02-02 381/week @ 2025-02-09 267/week @ 2025-02-16 265/week @ 2025-02-23 98/week @ 2025-03-02 210/week @ 2025-03-09 481/week @ 2025-03-16 281/week @ 2025-03-23

1,079 downloads per month
Used in 3 crates

Custom license

72KB
940 lines

Contains (ELF exe/lib, 135KB) tests/data/ls

elf_rs

Build Status Crates.io

This is a no_std library for ELF file handling. It supports ELF32 and ELF64 format.

Usage

To read an elf file, supply elf_rs::Elf with a &[u8] memory:

extern crate elf_rs;

use std::io::Read;
use std::fs::File;
use std::env;

use elf_rs::*;

fn read_elf(filename: &String) {
    let mut elf_file = File::open(filename).expect("open file failed");
    let mut elf_buf = Vec::<u8>::new();
    elf_file.read_to_end(&mut elf_buf).expect("read file failed");

    let elf = Elf::from_bytes(&elf_buf).expect("load elf file failed");

    println!("{:?} header: {:?}", elf, elf.elf_header());

    for p in elf.program_header_iter() {
        println!("{:x?}", p);
    }

    for s in elf.section_header_iter() {
        println!("{:x?}", s);
    }

    let s = elf.lookup_section(b".text");
    println!("s {:?}", s);
}

Under example directory there is a demo readelf to read an ELF file.

$ cargo run --example readelf <path_to_elf_file>

License

it is distributed under the terms of the MIT license.

Please see LICENSE file for details.

Dependencies

~165–255KB