diff --git a/src/analysis/schemas.rs b/src/analysis/schemas.rs index 87842d8..17c6acd 100644 --- a/src/analysis/schemas.rs +++ b/src/analysis/schemas.rs @@ -144,7 +144,7 @@ fn read_class_binding_fields( return Ok(Vec::new()); } - (0..binding.field_count).try_fold(Vec::new(), |mut acc, i| { + (0..binding.fields_count).try_fold(Vec::new(), |mut acc, i| { let field = binding.fields.at(i as _).read(process)?; if field.schema_type.is_null() { @@ -178,12 +178,12 @@ fn read_class_binding_metadata( (0..binding.static_metadata_count).try_fold(Vec::new(), |mut acc, i| { let metadata = binding.static_metadata.at(i as _).read(process)?; - if metadata.data.is_null() { + if metadata.network_value.is_null() { return Ok(acc); } let name = metadata.name.read_string(process)?.to_string(); - let network_value = metadata.data.read(process)?; + let network_value = metadata.network_value.read(process)?; let metadata = match name.as_str() { "MNetworkChangeCallback" => unsafe { @@ -229,14 +229,14 @@ fn read_enum_binding( "found enum: {} @ {:#X} (alignment: {}) (members count: {})", name, binding_ptr.to_umem(), - binding.alignment, + binding.align_of, binding.size, ); Ok(Enum { name, - alignment: binding.alignment, - size: binding.enumerator_count, + alignment: binding.align_of, + size: binding.enumerators_count, members, }) } @@ -249,7 +249,7 @@ fn read_enum_binding_members( return Ok(Vec::new()); } - (0..binding.enumerator_count).try_fold(Vec::new(), |mut acc, i| { + (0..binding.enumerators_count).try_fold(Vec::new(), |mut acc, i| { let enumerator = binding.enumerators.at(i as _).read(process)?; let name = enumerator.name.read_string(process)?.to_string(); @@ -270,10 +270,10 @@ fn read_schema_system(process: &mut IntoProcessInstanceArcBox<'_>) -> Result, // 0x0000 - pub schema_type: Pointer64, // 0x0008 - pub single_inheritance_offset: i32, // 0x0010 - pub static_metadata_count: i32, // 0x0014 - pub static_metadata: Pointer64, // 0x0018 + pub name: Pointer64, // 0x0000 + pub schema_type: Pointer64, // 0x0008 + pub single_inheritance_offset: i32, // 0x0010 + pub metadata_count: i32, // 0x0014 + pub metadata: Pointer64, // 0x0018 } diff --git a/src/source2/schema_system/schema_class_info_data.rs b/src/source2/schema_system/schema_class_info_data.rs index 2cc0b40..2492e39 100644 --- a/src/source2/schema_system/schema_class_info_data.rs +++ b/src/source2/schema_system/schema_class_info_data.rs @@ -1,6 +1,9 @@ use memflow::prelude::v1::*; -use super::*; +use super::{ + SchemaBaseClassInfoData, SchemaClassFieldData, SchemaMetadataEntryData, SchemaStaticFieldData, + SchemaSystemTypeScope, SchemaType, +}; pub type SchemaClassBinding = SchemaClassInfoData; @@ -12,13 +15,13 @@ pub struct SchemaClassInfoData { pub name: Pointer64, // 0x0008 pub module_name: Pointer64, // 0x0010 pub size: i32, // 0x0018 - pub field_count: u16, // 0x001C - pub static_field_count: u16, // 0x001E - pub static_metadata_count: u16, // 0x0020 - pub alignment: u8, // 0x0022 - pub base_class_count: u8, // 0x0023 - pub multiple_inheritance_depth: u16, // 0x0024 - pub single_inheritance_depth: u16, // 0x0026 + pub fields_count: i16, // 0x001C + pub static_fields_count: i16, // 0x001E + pub static_metadata_count: i16, // 0x0020 + pub align_of: u8, // 0x0022 + pub has_base_class: u8, // 0x0023 + pub total_class_size: i16, // 0x0024 + pub derived_class_size: i16, // 0x0026 pub fields: Pointer64<[SchemaClassFieldData]>, // 0x0028 pub static_fields: Pointer64<[SchemaStaticFieldData]>, // 0x0030 pub base_classes: Pointer64, // 0x0038 diff --git a/src/source2/schema_system/schema_enum_info_data.rs b/src/source2/schema_system/schema_enum_info_data.rs index 74b2d46..6c4b500 100644 --- a/src/source2/schema_system/schema_enum_info_data.rs +++ b/src/source2/schema_system/schema_enum_info_data.rs @@ -12,9 +12,9 @@ pub struct SchemaEnumInfoData { pub name: Pointer64, // 0x0008 pub module_name: Pointer64, // 0x0010 pub size: u8, // 0x0018 - pub alignment: u8, // 0x0019 - pub flags: u16, // 0x001A - pub enumerator_count: u16, // 0x001C + pub align_of: u8, // 0x0019 + pad_001a: [u8; 0x2], // 0x001A + pub enumerators_count: u16, // 0x001C pub static_metadata_count: u16, // 0x001E pub enumerators: Pointer64<[SchemaEnumeratorInfoData]>, // 0x0020 pub static_metadata: Pointer64, // 0x0028 diff --git a/src/source2/schema_system/schema_enumerator_info_data.rs b/src/source2/schema_system/schema_enumerator_info_data.rs index d6cf24f..9376ca8 100644 --- a/src/source2/schema_system/schema_enumerator_info_data.rs +++ b/src/source2/schema_system/schema_enumerator_info_data.rs @@ -5,11 +5,11 @@ use super::SchemaMetadataEntryData; #[derive(Pod)] #[repr(C)] pub struct SchemaEnumeratorInfoData { - pub name: Pointer64, // 0x0000 - pub value: SchemaEnumeratorInfoDataUnion, // 0x0008 - pub static_metadata_count: i32, // 0x0010 - pad_0014: [u8; 0x4], // 0x0014 - pub static_metadata: Pointer64, // 0x0018 + pub name: Pointer64, // 0x0000 + pub value: SchemaEnumeratorInfoDataUnion, // 0x0008 + pub metadata_count: i32, // 0x0010 + pad_0014: [u8; 0x4], // 0x0014 + pub metadata: Pointer64, // 0x0018 } #[repr(C)] diff --git a/src/source2/schema_system/schema_metadata_entry_data.rs b/src/source2/schema_system/schema_metadata_entry_data.rs index 1682238..8cf5cac 100644 --- a/src/source2/schema_system/schema_metadata_entry_data.rs +++ b/src/source2/schema_system/schema_metadata_entry_data.rs @@ -5,8 +5,8 @@ use memflow::prelude::v1::*; #[derive(Pod)] #[repr(C)] pub struct SchemaMetadataEntryData { - pub name: Pointer64, // 0x0000 - pub data: Pointer64, // 0x0008 + pub name: Pointer64, // 0x0000 + pub network_value: Pointer64, // 0x0008 } #[derive(Pod)] diff --git a/src/source2/schema_system/schema_static_field_data.rs b/src/source2/schema_system/schema_static_field_data.rs index d6a9e4a..5a421f5 100644 --- a/src/source2/schema_system/schema_static_field_data.rs +++ b/src/source2/schema_system/schema_static_field_data.rs @@ -5,10 +5,10 @@ use super::{SchemaMetadataEntryData, SchemaType}; #[derive(Pod)] #[repr(C)] pub struct SchemaStaticFieldData { - pub name: Pointer64, // 0x0000 - pub type_: Pointer64, // 0x0008 - pub instance: Pointer64<()>, // 0x0010 - pub static_metadata_count: i32, // 0x0018 - pad_001c: [u8; 0x4], // 0x001C - pub static_metadata: Pointer64, // 0x0020 + pub name: Pointer64, // 0x0000 + pub type_: Pointer64, // 0x0008 + pub instance: Pointer64<()>, // 0x0010 + pub metadata_count: i32, // 0x0018 + pad_001c: [u8; 0x4], // 0x001C + pub metadata: Pointer64, // 0x0020 } diff --git a/src/source2/schema_system/schema_system.rs b/src/source2/schema_system/schema_system.rs index 4b503ba..2c93468 100644 --- a/src/source2/schema_system/schema_system.rs +++ b/src/source2/schema_system/schema_system.rs @@ -10,6 +10,6 @@ pub struct SchemaSystem { pad_0000: [u8; 0x188], // 0x0000 pub type_scopes: UtlVector>, // 0x0188 pad_0198: [u8; 0x120], // 0x0198 - pub num_registrations: u32, // 0x02B8 + pub num_registrations: i32, // 0x02B8 pad_02bc: [u8; 0xAC], // 0x02BC }