This commit is contained in:
Jean-Marie Mineau 2025-01-15 16:20:53 +01:00
parent b9f52e4ca5
commit dfcd6232a4
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
4 changed files with 683 additions and 666 deletions

File diff suppressed because it is too large Load diff

View file

@ -551,7 +551,7 @@ fn test_2_from_json() {
let mut json = String::new(); let mut json = String::new();
file.read_to_string(&mut json).unwrap(); file.read_to_string(&mut json).unwrap();
let apk: Apk = serde_json::from_str(&json).unwrap(); let apk: Apk = serde_json::from_str(&json).unwrap();
let dex = apk.gen_raw_dex().unwrap().remove("classe.dex").unwrap(); let dex = apk.gen_raw_dex().unwrap().remove("classes.dex").unwrap();
let mut new_apk = Apk::new(); let mut new_apk = Apk::new();
new_apk new_apk
.add_dex_file("classes.dex", &dex, false, false) .add_dex_file("classes.dex", &dex, false, false)

View file

@ -63,7 +63,7 @@
} }
}, },
{ {
"ReturnVoid": null "ReturnVoid": {}
} }
] ]
} }
@ -184,7 +184,7 @@
} }
}, },
{ {
"Nop": null "Nop": {}
} }
] ]
} }

View file

@ -297,6 +297,15 @@ impl DebugInfoReader {
DbgBytecode::EndLocal { DbgBytecode::EndLocal {
register_num: Uleb128(register_num), register_num: Uleb128(register_num),
} => { } => {
// Yes this can happen
while self.register_states.len() < (register_num + 1) as usize {
self.register_states.push(DebugRegState {
name_idx: None,
type_idx: None,
sig_idx: None,
in_scope: false,
})
}
self.register_states[register_num as usize].in_scope = false; self.register_states[register_num as usize].in_scope = false;
Some(DebugInfo::EndLocal { Some(DebugInfo::EndLocal {
addr: self.address, addr: self.address,
@ -655,6 +664,10 @@ mod test {
addr_diff: Uleb128(51), addr_diff: Uleb128(51),
}, },
SpecialOpcode(14), SpecialOpcode(14),
// End a local that do not already exist
EndLocal {
register_num: Uleb128(41),
},
], ],
}; };
assert_eq!( assert_eq!(