WIP: fix data size

This commit is contained in:
Jean-Marie Mineau 2024-02-09 18:01:19 +01:00
parent 93f70040fd
commit d8a4727d59
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
3 changed files with 27 additions and 4 deletions

View file

@ -377,12 +377,26 @@ impl<'a> DexFileReader<'a> {
pub fn get_struct_at_offset<T: Serializable>(&self, offset: u32) -> Result<T> {
let mut buffer = Cursor::new(self.data);
buffer.seek(SeekFrom::Start(offset as u64)).unwrap();
T::deserialize(&mut buffer).map_err(|err| {
let r = T::deserialize(&mut buffer).map_err(|err| {
Error::DeserializationError(format!(
"Failed to deserialize {} at 0x{:x}: {err}",
std::any::type_name::<T>(),
offset
))
})
});
if buffer.position() as u32 > self.header.data_off + self.header.data_size {
// Return error? Android won't run an apk that does not respect this condition for most
// (all?) struct, but a lot a tools don't care.
warn!(
"Deserialized {} at 0x{:x}, but ended up reading out of the data section \
(0x{:x} to 0x{:x}, current cursor at 0x{:x}",
std::any::type_name::<T>(),
offset,
self.header.data_off,
self.header.data_off + self.header.data_size,
buffer.position()
);
}
r
}
}