use anyhow::{bail, Result};
use clap::{Parser, Subcommand};
use fs_err as fs;
use object::{Object, ObjectSection};
use std::path::PathBuf;
#[derive(Parser)]
struct Args {
#[command(subcommand)]
action: Action,
}
#[derive(Subcommand)]
enum Action {
Dump { input: PathBuf },
}
fn dump_sbat(input: PathBuf) -> Result<()> {
let data = fs::read(input)?;
let file = object::File::parse(&*data)?;
if let Some(section) = file.section_by_name(".sbat") {
let section_data = section.data()?;
let sbat = std::str::from_utf8(section_data)?;
println!("{sbat}");
Ok(())
} else {
bail!("missing '.sbat' section");
}
}
fn main() -> Result<()> {
let args = Args::parse();
match args.action {
Action::Dump { input } => dump_sbat(input),
}
}