use std::env;
const HELP_TEXT: &str = r#"\
PE Module-Definition Generator from DLL.
To create an import library run the following command afterwards:
lib /def:"MODULE.DEF" /out:"MODULE.LIB" /machine:[x86|x64]
Usage:
module-def "MODULE.DLL" > "MODULE.DEF"
"#;
fn main() {
let mut args = env::args_os();
if let (Some(_), Some(dll), None) = (args.next(), args.next(), args.next()) {
match pelite::FileMap::open(&dll) {
Ok(map) => {
let result = match pelite::PeFile::from_bytes(&map) {
Ok(pe) => lib(pe),
Err(err) => Err(err),
};
if let Err(err) = result {
eprintln!("module-def: {}", err);
}
},
Err(err) => {
eprintln!("module-def: {}", err);
},
};
}
else {
println!("{}", HELP_TEXT);
}
}
fn lib(pe: pelite::PeFile) -> pelite::Result<()> {
let exp = pe.exports()?.by()?;
let dll_name = exp.dll_name()?;
let names = exp
.iter_names()
.map(|(name, _)| name)
.collect::<pelite::Result<Vec<_>>>()?;
println!("LIBRARY {}\nEXPORTS", dll_name);
for name in &names {
println!("{}", name);
}
Ok(())
}