fix: 修复一个todo问题
This commit is contained in:
parent
3e0a858318
commit
cb2c6f3630
10
src/pe.rs
10
src/pe.rs
@ -301,7 +301,7 @@ pub trait ReadOnlyPE: Deref<Target = [u8]> + Sized + AsRef<[u8]> {
|
||||
|
||||
|
||||
/// 获取导出函数的RVA地址,类似于GetProcAddress
|
||||
fn get_export_function_rva(&self, proc_name: ProcName) -> Result<u32, PEParseError>{
|
||||
fn get_export_function_rva(&self, proc_name: ProcName) -> Result<Option<u32>, PEParseError>{
|
||||
let export_table_dir = self.get_data_directory(ImageDirectoryEntry::Export)?;
|
||||
let export_table_rva = export_table_dir.virtual_address;
|
||||
let export_table = self.parse_export_table(export_table_rva)?;
|
||||
@ -335,7 +335,7 @@ pub trait ReadOnlyPE: Deref<Target = [u8]> + Sized + AsRef<[u8]> {
|
||||
let functions_table_foa = self.rva_to_foa(export_table.address_of_functions)?;
|
||||
let function_item_foa = functions_table_foa + ordinal as u32 * std::mem::size_of::<u32>() as u32;
|
||||
let rva = self.get_ref::<u32>(function_item_foa as usize)?.clone();
|
||||
return Ok(rva);
|
||||
return Ok(Some(rva));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -349,13 +349,11 @@ pub trait ReadOnlyPE: Deref<Target = [u8]> + Sized + AsRef<[u8]> {
|
||||
let functions_table_foa = self.rva_to_foa(export_table.address_of_functions)?;
|
||||
let function_item_foa = functions_table_foa + find_ordinal * std::mem::size_of::<u32>() as u32;
|
||||
let rva = self.get_ref::<u32>(function_item_foa as usize)?.clone();
|
||||
return Ok(rva);
|
||||
return Ok(Some(rva));
|
||||
}
|
||||
}
|
||||
|
||||
todo!()
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
}
|
||||
/// 可修改的PE trait
|
||||
pub trait MutablePE: ReadOnlyPE + DerefMut<Target = [u8]> + AsMut<[u8]> {
|
||||
|
@ -61,7 +61,8 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn test_find_export_function() {
|
||||
let find_function_str = ProcName::Named("test_def_add".to_string());
|
||||
// let find_function_str = ProcName::Named("test_def_add".to_string());
|
||||
let find_function_str = ProcName::Ordinal(2);
|
||||
// 1. 还是先映射
|
||||
use pe_parse::pe::ReadOnlyPE;
|
||||
let file = std::fs::OpenOptions::new()
|
||||
@ -70,6 +71,14 @@ mod test {
|
||||
.unwrap();
|
||||
let mmap = unsafe { Mmap::map(&file).unwrap() };
|
||||
let result_rva = mmap.get_export_function_rva(find_function_str).unwrap();
|
||||
println!("Find Function RVA: {:#x}", result_rva);
|
||||
match result_rva {
|
||||
None => {
|
||||
println!("Can't find the function");
|
||||
return;
|
||||
}
|
||||
Some(rva) => {
|
||||
println!("Find Function RVA: {:#x}", rva);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user