From 3d296081713f3e60e3881abdaa4eaaf939b64386 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 28 Oct 2024 00:33:18 +0200 Subject: [PATCH] parse with goblin --- crates/vestal/src/main.rs | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/crates/vestal/src/main.rs b/crates/vestal/src/main.rs index caa70fe..3e73d55 100644 --- a/crates/vestal/src/main.rs +++ b/crates/vestal/src/main.rs @@ -1,5 +1,6 @@ use clap::Parser; use std::path::Path; +use goblin::{error, Object}; use exe::pe::{PE, VecPE}; use exe::types::{ImportDirectory, ImportData, CCharString}; @@ -25,18 +26,29 @@ impl VestalCli { } } fn inspect (&self, path: impl AsRef) -> Usually<()> { - let image = VecPE::from_disk_file(path)?; - let import_directory = ImportDirectory::parse(&image)?; - for descriptor in import_directory.descriptors { - let name = descriptor.get_name(&image)?.as_str()?; - println!("\n{name}:"); - for import in descriptor.get_imports(&image).unwrap() { - match import { - ImportData::Ordinal(x) => println!("{name} #{}", x), - ImportData::ImportByName(s) => println!("{name} {}", s) - } - } + let buffer = std::fs::read(path.as_ref())?; + match Object::parse(&buffer)? { + Object::PE(pe) => { + println!("PE: {}", path.as_ref().display()); + //println!("Exports: {:#?}", &pe.export_data); + println!("Exports: {:#?}", &pe.exports.len()); + //println!("Imports: {:#?}", &pe.import_data); + println!("Imports: {:#?}", &pe.imports.len()); + }, + _ => panic!("not a PE") } + //let image = VecPE::from_disk_file(path)?; + //let import_directory = ImportDirectory::parse(&image)?; + //for descriptor in import_directory.descriptors { + //let name = descriptor.get_name(&image)?.as_str()?; + //println!("\n{name}:"); + //for import in descriptor.get_imports(&image).unwrap() { + //match import { + //ImportData::Ordinal(x) => println!("{name} #{x}"), + //ImportData::ImportByName(s) => println!("{name} {s}") + //} + //} + //} Ok(()) } }