diff --git a/src/dumper/interfaces.rs b/src/dumper/interfaces.rs
index 20b6736..b921b49 100644
--- a/src/dumper/interfaces.rs
+++ b/src/dumper/interfaces.rs
@@ -8,7 +8,7 @@ use simplelog::{debug, info};
use super::{generate_files, Entries, Entry};
use crate::builder::FileBuilderEnum;
-use crate::os::{Address, Process};
+use crate::os::Process;
#[derive(Debug)]
#[repr(C)]
@@ -19,7 +19,7 @@ struct InterfaceNode {
}
impl InterfaceNode {
- fn instance(&self, process: &Process) -> Result
{
+ fn instance(&self, process: &Process) -> Result {
process
.read_memory::(
(self as *const _ as usize + offset_of!(InterfaceNode, create_fn)).into(),
diff --git a/src/dumper/offsets.rs b/src/dumper/offsets.rs
index 55320e7..70e0545 100644
--- a/src/dumper/offsets.rs
+++ b/src/dumper/offsets.rs
@@ -52,11 +52,7 @@ pub fn dump_offsets(
let size = size.unwrap_or(8);
for _ in 0..times {
- process.read_memory_raw(
- address,
- &mut address.0 as *mut _ as *mut _,
- size,
- )?;
+ process.read_memory_raw(address, &mut address as *mut _ as *mut _, size)?;
}
}
Jmp { offset, length } => {
@@ -69,7 +65,7 @@ pub fn dump_offsets(
let mut result: usize = 0;
process.read_memory_raw(
- address.add(start),
+ address + start,
&mut result as *mut _ as *mut _,
end - start,
)?;
@@ -86,17 +82,17 @@ pub fn dump_offsets(
signature.name, address
);
- (signature.name, address.0)
+ (signature.name, address)
} else {
debug!(
"Found {}> @ {:#X}> ({}> + {:#X}>)",
signature.name,
address,
signature.module,
- address.sub(module.base().0)
+ address - module.base()
);
- (signature.name, address.sub(module.base().0).0)
+ (signature.name, address - module.base())
};
if name == "dwBuildNumber" {
diff --git a/src/os/address.rs b/src/os/address.rs
deleted file mode 100644
index 4ea288a..0000000
--- a/src/os/address.rs
+++ /dev/null
@@ -1,137 +0,0 @@
-use std::fmt::{LowerHex, UpperHex};
-use std::ops::{Add, AddAssign, Sub, SubAssign};
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd)]
-#[repr(transparent)]
-pub struct Address(pub usize);
-
-impl Address {
- #[inline]
- pub fn add(&self, value: usize) -> Self {
- Self(self.0 + value)
- }
-
- #[inline]
- pub fn is_zero(&self) -> bool {
- self.0 == 0
- }
-
- #[inline]
- pub fn sub(&self, value: usize) -> Self {
- Self(self.0 - value)
- }
-
- #[inline]
- pub fn as_ptr(&self) -> *const T {
- self.0 as *const T
- }
-
- #[inline]
- pub fn as_mut_ptr(&self) -> *mut T {
- self.0 as *mut T
- }
-}
-
-impl From for Address {
- fn from(value: usize) -> Self {
- Self(value)
- }
-}
-
-impl From<*const u8> for Address {
- fn from(value: *const u8) -> Self {
- Self(value as usize)
- }
-}
-
-impl From<*mut u8> for Address {
- fn from(value: *mut u8) -> Self {
- Self(value as usize)
- }
-}
-
-impl From for usize {
- fn from(value: Address) -> Self {
- value.0
- }
-}
-
-impl From for *const u8 {
- fn from(value: Address) -> Self {
- value.0 as *const u8
- }
-}
-
-impl From for *mut u8 {
- fn from(value: Address) -> Self {
- value.0 as *mut u8
- }
-}
-
-impl Add for Address {
- type Output = Self;
-
- fn add(self, rhs: usize) -> Self::Output {
- Self(self.0 + rhs)
- }
-}
-
-impl Add for Address {
- type Output = Self;
-
- fn add(self, rhs: Address) -> Self::Output {
- Self(self.0 + rhs.0)
- }
-}
-
-impl AddAssign for Address {
- fn add_assign(&mut self, rhs: usize) {
- self.0 += rhs;
- }
-}
-
-impl AddAssign for Address {
- fn add_assign(&mut self, rhs: Address) {
- self.0 += rhs.0;
- }
-}
-
-impl Sub for Address {
- type Output = Self;
-
- fn sub(self, rhs: usize) -> Self::Output {
- Self(self.0 - rhs)
- }
-}
-
-impl Sub for Address {
- type Output = Self;
-
- fn sub(self, rhs: Address) -> Self::Output {
- Self(self.0 - rhs.0)
- }
-}
-
-impl SubAssign for Address {
- fn sub_assign(&mut self, rhs: usize) {
- self.0 -= rhs;
- }
-}
-
-impl SubAssign for Address {
- fn sub_assign(&mut self, rhs: Address) {
- self.0 -= rhs.0;
- }
-}
-
-impl UpperHex for Address {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "{:#X}", self.0)
- }
-}
-
-impl LowerHex for Address {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "{:#x}", self.0)
- }
-}
diff --git a/src/os/mod.rs b/src/os/mod.rs
index 08a23a3..fa3b87b 100644
--- a/src/os/mod.rs
+++ b/src/os/mod.rs
@@ -1,7 +1,5 @@
-pub use address::Address;
pub use module::Module;
pub use process::Process;
-pub mod address;
pub mod module;
pub mod process;
diff --git a/src/os/module.rs b/src/os/module.rs
index e176cf0..1819d54 100644
--- a/src/os/module.rs
+++ b/src/os/module.rs
@@ -6,8 +6,6 @@ use goblin::pe::options::ParseOptions;
use goblin::pe::section_table::SectionTable;
use goblin::pe::PE;
-use super::Address;
-
pub struct Module<'a> {
pub name: &'a str,
pub data: &'a [u8],
@@ -28,8 +26,8 @@ impl<'a> Module<'a> {
}
#[inline]
- pub fn base(&self) -> Address {
- self.pe.image_base.into()
+ pub fn base(&self) -> usize {
+ self.pe.image_base
}
#[inline]
@@ -43,21 +41,21 @@ impl<'a> Module<'a> {
}
#[inline]
- pub fn export_by_name(&self, name: &str) -> Option {
+ pub fn export_by_name(&self, name: &str) -> Option {
self.pe
.exports
.iter()
.find(|e| e.name.unwrap() == name)
- .map(|e| (self.pe.image_base + e.rva).into())
+ .map(|e| self.pe.image_base + e.rva)
}
#[inline]
- pub fn import_by_name(&self, name: &str) -> Option {
+ pub fn import_by_name(&self, name: &str) -> Option {
self.pe
.imports
.iter()
.find(|i| i.name.to_string() == name)
- .map(|i| (self.pe.image_base + i.rva).into())
+ .map(|i| self.pe.image_base + i.rva)
}
#[inline]
diff --git a/src/os/process.rs b/src/os/process.rs
index 8305497..8a7f138 100644
--- a/src/os/process.rs
+++ b/src/os/process.rs
@@ -10,7 +10,7 @@ use windows::Win32::System::Diagnostics::Debug::ReadProcessMemory;
use windows::Win32::System::Diagnostics::ToolHelp::*;
use windows::Win32::System::Threading::{OpenProcess, PROCESS_ALL_ACCESS};
-use super::{Address, Module};
+use super::Module;
#[derive(Debug)]
pub struct Process {
@@ -36,7 +36,7 @@ impl Process {
Ok(process)
}
- pub fn find_pattern(&self, module_name: &str, pattern: &str) -> Option {
+ pub fn find_pattern(&self, module_name: &str, pattern: &str) -> Option {
let module = self.get_module_by_name(module_name)?;
let pattern_bytes = Self::pattern_to_bytes(pattern);
@@ -70,7 +70,7 @@ impl Process {
Ok(modules)
}
- pub fn read_memory(&self, address: Address) -> Result {
+ pub fn read_memory(&self, address: usize) -> Result {
let mut buffer: T = unsafe { mem::zeroed() };
self.read_memory_raw(
@@ -82,16 +82,11 @@ impl Process {
Ok(buffer)
}
- pub fn read_memory_raw(
- &self,
- address: Address,
- buffer: *mut c_void,
- size: usize,
- ) -> Result<()> {
+ pub fn read_memory_raw(&self, address: usize, buffer: *mut c_void, size: usize) -> Result<()> {
unsafe {
ReadProcessMemory(
self.handle,
- address.as_ptr(),
+ address as *mut _,
buffer,
size,
Some(ptr::null_mut()),
@@ -100,7 +95,7 @@ impl Process {
.map_err(|e| e.into())
}
- pub fn read_string(&self, address: Address) -> Result {
+ pub fn read_string(&self, address: usize) -> Result {
let mut buffer = Vec::new();
for i in 0.. {
@@ -113,7 +108,7 @@ impl Process {
Ok(String::from_utf8(buffer)?)
}
- pub fn read_string_length(&self, address: Address, length: usize) -> Result {
+ pub fn read_string_length(&self, address: usize, length: usize) -> Result {
let mut buffer = vec![0; length];
self.read_memory_raw(address, buffer.as_mut_ptr() as *mut _, length)?;
@@ -127,30 +122,26 @@ impl Process {
pub fn resolve_jmp(
&self,
- address: Address,
+ address: usize,
offset: Option,
length: Option,
- ) -> Result {
+ ) -> Result {
// The displacement value can be negative.
- let displacement = self.read_memory::(address.add(offset.unwrap_or(0x1)))?;
+ let displacement = self.read_memory::(address + offset.unwrap_or(0x1))?;
- Ok(address
- .add(length.unwrap_or(0x5))
- .add(displacement as usize))
+ Ok((address + displacement as usize) + length.unwrap_or(0x5))
}
pub fn resolve_rip(
&self,
- address: Address,
+ address: usize,
offset: Option,
length: Option,
- ) -> Result {
+ ) -> Result {
// The displacement value can be negative.
- let displacement = self.read_memory::(address.add(offset.unwrap_or(0x3)))?;
+ let displacement = self.read_memory::(address + offset.unwrap_or(0x3))?;
- Ok(address
- .add(length.unwrap_or(0x7))
- .add(displacement as usize))
+ Ok((address + displacement as usize) + length.unwrap_or(0x7))
}
fn get_process_id_by_name(process_name: &str) -> Result {
@@ -193,7 +184,7 @@ impl Process {
let mut data = vec![0; entry.modBaseSize as usize];
if let Ok(_) = self.read_memory_raw(
- entry.modBaseAddr.into(),
+ entry.modBaseAddr as _,
data.as_mut_ptr() as *mut _,
data.len(),
) {
diff --git a/src/sdk/schema_class_field_data.rs b/src/sdk/schema_class_field_data.rs
index 22035ec..4af5968 100644
--- a/src/sdk/schema_class_field_data.rs
+++ b/src/sdk/schema_class_field_data.rs
@@ -2,15 +2,15 @@ use anyhow::Result;
use super::SchemaType;
-use crate::os::{Address, Process};
+use crate::os::Process;
pub struct SchemaClassFieldData<'a> {
process: &'a Process,
- address: Address,
+ address: usize,
}
impl<'a> SchemaClassFieldData<'a> {
- pub fn new(process: &'a Process, address: Address) -> Self {
+ pub fn new(process: &'a Process, address: usize) -> Self {
Self { process, address }
}
@@ -21,12 +21,9 @@ impl<'a> SchemaClassFieldData<'a> {
}
pub fn r#type(&self) -> Result {
- Ok(SchemaType::new(
- self.process,
- self.process
- .read_memory::(self.address + 0x8)?
- .into(),
- ))
+ let address = self.process.read_memory::(self.address + 0x8)?;
+
+ Ok(SchemaType::new(self.process, address))
}
pub fn offset(&self) -> Result {
diff --git a/src/sdk/schema_class_info.rs b/src/sdk/schema_class_info.rs
index 82c63ed..9783d54 100644
--- a/src/sdk/schema_class_info.rs
+++ b/src/sdk/schema_class_info.rs
@@ -2,26 +2,26 @@ use anyhow::Result;
use super::SchemaClassFieldData;
-use crate::os::{Address, Process};
+use crate::os::Process;
pub struct SchemaClassInfo<'a> {
process: &'a Process,
- address: Address,
- class_name: String,
+ address: usize,
+ name: String,
}
impl<'a> SchemaClassInfo<'a> {
- pub fn new(process: &'a Process, address: Address, class_name: &str) -> Self {
+ pub fn new(process: &'a Process, address: usize, name: &str) -> Self {
Self {
process,
address,
- class_name: class_name.to_string(),
+ name: name.to_string(),
}
}
#[inline]
pub fn name(&self) -> &str {
- &self.class_name
+ &self.name
}
pub fn fields(&self) -> Result> {
@@ -46,14 +46,13 @@ impl<'a> SchemaClassInfo<'a> {
}
pub fn parent(&self) -> Result