mirror of
https://github.com/a2x/cs2-dumper.git
synced 2025-10-07 16:30:01 +08:00
📦 Game Update 13952
This commit is contained in:
@@ -17,15 +17,15 @@ pub fn dump_interfaces(builders: &mut Vec<FileBuilderEnum>, process: &Process) -
|
||||
if let Some(create_interface_export) = module.export("CreateInterface") {
|
||||
let create_interface_address = process.resolve_rip(create_interface_export.va)?;
|
||||
|
||||
let mut interface_registry = process
|
||||
let mut interface_registry_ptr = process
|
||||
.read_memory::<usize>(create_interface_address)
|
||||
.unwrap_or(0);
|
||||
|
||||
while interface_registry != 0 {
|
||||
let interface_ptr = process.read_memory::<usize>(interface_registry)?;
|
||||
while interface_registry_ptr != 0 {
|
||||
let interface_ptr = process.read_memory::<usize>(interface_registry_ptr)?;
|
||||
|
||||
let interface_version_name_ptr =
|
||||
process.read_memory::<usize>(interface_registry + 0x8)?;
|
||||
process.read_memory::<usize>(interface_registry_ptr + 0x8)?;
|
||||
|
||||
let interface_version_name = process.read_string(interface_version_name_ptr, 64)?;
|
||||
|
||||
@@ -41,7 +41,8 @@ pub fn dump_interfaces(builders: &mut Vec<FileBuilderEnum>, process: &Process) -
|
||||
.or_default()
|
||||
.push((interface_version_name, interface_ptr - module.address()));
|
||||
|
||||
interface_registry = process.read_memory::<usize>(interface_registry + 0x10)?;
|
||||
interface_registry_ptr =
|
||||
process.read_memory::<usize>(interface_registry_ptr + 0x10)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -8,6 +8,7 @@ pub enum Error {
|
||||
ModuleNotFound,
|
||||
PatternNotFound,
|
||||
ProcessNotFound,
|
||||
SectionNotFound,
|
||||
SerdeError(serde_json::Error),
|
||||
Utf8Error(std::string::FromUtf8Error),
|
||||
WindowsError(windows::core::Error),
|
||||
@@ -44,6 +45,7 @@ impl std::fmt::Display for Error {
|
||||
Self::ModuleNotFound => write!(fmt, "Module not found"),
|
||||
Self::PatternNotFound => write!(fmt, "Pattern not found"),
|
||||
Self::ProcessNotFound => write!(fmt, "Process not found"),
|
||||
Self::SectionNotFound => write!(fmt, "Section not found"),
|
||||
Self::SerdeError(err) => write!(fmt, "Serde error: {}", err),
|
||||
Self::Utf8Error(err) => write!(fmt, "UTF-8 error: {}", err),
|
||||
Self::WindowsError(err) => write!(fmt, "Windows error: {}", err),
|
||||
|
@@ -18,8 +18,8 @@ pub struct Export {
|
||||
#[derive(Debug)]
|
||||
pub struct Section {
|
||||
pub name: String,
|
||||
pub start_rva: usize,
|
||||
pub end_rva: usize,
|
||||
pub start_va: usize,
|
||||
pub end_va: usize,
|
||||
pub size: usize,
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ impl<'a> Module<'a> {
|
||||
let size = nt_headers.OptionalHeader.SizeOfImage;
|
||||
|
||||
let exports = unsafe { Self::parse_exports(process, address, size, nt_headers)? };
|
||||
let sections = unsafe { Self::parse_sections(nt_headers) };
|
||||
let sections = unsafe { Self::parse_sections(address, nt_headers) };
|
||||
|
||||
Ok(Self {
|
||||
address,
|
||||
@@ -177,7 +177,7 @@ impl<'a> Module<'a> {
|
||||
Ok(exports)
|
||||
}
|
||||
|
||||
unsafe fn parse_sections(nt_headers: &IMAGE_NT_HEADERS64) -> Vec<Section> {
|
||||
unsafe fn parse_sections(address: usize, nt_headers: &IMAGE_NT_HEADERS64) -> Vec<Section> {
|
||||
let optional_header_ptr = &nt_headers.OptionalHeader as *const _ as *const u8;
|
||||
|
||||
let section_header_ptr = optional_header_ptr
|
||||
@@ -198,12 +198,16 @@ impl<'a> Module<'a> {
|
||||
|
||||
let start_rva = section.VirtualAddress as usize;
|
||||
let end_rva = start_rva + section.Misc.VirtualSize as usize;
|
||||
|
||||
let start_va = address + start_rva;
|
||||
let end_va = address + end_rva;
|
||||
|
||||
let size = section.SizeOfRawData as usize;
|
||||
|
||||
Section {
|
||||
name,
|
||||
start_rva,
|
||||
end_rva,
|
||||
start_va,
|
||||
end_va,
|
||||
size,
|
||||
}
|
||||
})
|
||||
|
Reference in New Issue
Block a user