WIP: fix data size
This commit is contained in:
parent
93f70040fd
commit
d8a4727d59
3 changed files with 27 additions and 4 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue