use std::fs::File;
use std::io::{Read, Result};
const ARM64_IMAGE_MAGIC: u32 = 0x644d_5241;
pub fn read_image(path: &str) -> Result<Vec<u8>> {
let mut f = File::open(path)?;
let mut buf = Vec::new();
f.read_to_end(&mut buf)?;
if buf.len() < 0x40 {
return Err(std::io::Error::new(
std::io::ErrorKind::InvalidData,
"image too short",
));
}
let magic = u32::from_le_bytes(buf[0x38..0x3c].try_into().unwrap());
if magic != ARM64_IMAGE_MAGIC {
return Err(std::io::Error::new(
std::io::ErrorKind::InvalidData,
format!("not a Linux aarch64 Image (magic=0x{magic:08x})"),
));
}
Ok(buf)
}
pub fn read_initramfs(path: &str) -> Result<Vec<u8>> {
let mut f = File::open(path)?;
let mut buf = Vec::new();
f.read_to_end(&mut buf)?;
Ok(buf)
}