Skip to main content

extract_kernel/
extract-kernel.rs

1//! Extracting a kernel from an Android boot image
2
3use std::{
4    fs::File,
5    io::{self, BufWriter, Read, Seek, SeekFrom},
6};
7
8use abootimg_oxide::{binrw::io::BufReader, Header};
9
10fn main() {
11    let mut r = BufReader::new(File::open("boot_a.img").unwrap());
12    let hdr = Header::parse(&mut r).unwrap();
13    println!("{hdr:#?}");
14
15    println!("kernel position: {}", hdr.kernel_position());
16    let mut w = BufWriter::new(File::create("boot_a_kernel").unwrap());
17    let r = r.get_mut();
18    r.seek(SeekFrom::Start(hdr.kernel_position() as u64))
19        .unwrap();
20    io::copy(&mut r.take(hdr.kernel_size().into()), w.get_mut()).unwrap();
21}