add parameter names
This commit is contained in:
parent
6d77df2b79
commit
b47c9dd666
3 changed files with 37 additions and 4 deletions
|
|
@ -103,6 +103,7 @@ impl Apk {
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut static_fields_list = vec![];
|
let mut static_fields_list = vec![];
|
||||||
let mut instance_fields_list = vec![];
|
let mut instance_fields_list = vec![];
|
||||||
let mut direct_methods = HashMap::new();
|
let mut direct_methods = HashMap::new();
|
||||||
|
|
@ -2175,11 +2176,29 @@ impl Apk {
|
||||||
use crate::instructions::Instruction;
|
use crate::instructions::Instruction;
|
||||||
use crate::instructions::{Label, Try};
|
use crate::instructions::{Label, Try};
|
||||||
let code_item = dex.get_struct_at_offset::<CodeItem>(offset)?;
|
let code_item = dex.get_struct_at_offset::<CodeItem>(offset)?;
|
||||||
|
|
||||||
let debug_info = if code_item.debug_info_off == 0 {
|
let debug_info = if code_item.debug_info_off == 0 {
|
||||||
vec![]
|
None
|
||||||
} else {
|
} else {
|
||||||
dex.get_struct_at_offset::<DebugInfoItem>(code_item.debug_info_off)?
|
Some(dex.get_struct_at_offset::<DebugInfoItem>(code_item.debug_info_off)?)
|
||||||
.serialize_to_vec()? // no dealing with that right now
|
};
|
||||||
|
let parameter_names = if let Some(ref debug_info) = debug_info {
|
||||||
|
let mut parameter_names = vec![];
|
||||||
|
for name_idx in &debug_info.parameter_names {
|
||||||
|
if name_idx == &NO_INDEX {
|
||||||
|
parameter_names.push(None);
|
||||||
|
} else {
|
||||||
|
parameter_names.push(Some(dex.get_string(name_idx.0)?.into()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(parameter_names)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
let debug_info = if let Some(debug_info) = debug_info {
|
||||||
|
debug_info.serialize_to_vec()?
|
||||||
|
} else {
|
||||||
|
vec![]
|
||||||
};
|
};
|
||||||
let mut labels: HashMap<usize, String> = HashMap::new();
|
let mut labels: HashMap<usize, String> = HashMap::new();
|
||||||
let mut tries = HashMap::new();
|
let mut tries = HashMap::new();
|
||||||
|
|
@ -2297,6 +2316,7 @@ impl Apk {
|
||||||
ins_size: code_item.ins_size,
|
ins_size: code_item.ins_size,
|
||||||
outs_size: code_item.outs_size,
|
outs_size: code_item.outs_size,
|
||||||
debug_info,
|
debug_info,
|
||||||
|
parameter_names,
|
||||||
insns,
|
insns,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,10 @@ pub struct Code {
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
/// The debug info
|
/// The debug info
|
||||||
#[pyo3(get)]
|
#[pyo3(get)]
|
||||||
pub debug_info: Vec<u8>,
|
pub debug_info: Vec<u8>, // Should be stripped, copying like this just don't work
|
||||||
|
/// The names of the parameters if given
|
||||||
|
#[pyo3(get)]
|
||||||
|
pub parameter_names: Option<Vec<Option<DexString>>>,
|
||||||
/// The instructions.
|
/// The instructions.
|
||||||
#[pyo3(get)]
|
#[pyo3(get)]
|
||||||
pub insns: Vec<Instruction>,
|
pub insns: Vec<Instruction>,
|
||||||
|
|
@ -70,12 +73,14 @@ impl Code {
|
||||||
ins_size: u16,
|
ins_size: u16,
|
||||||
outs_size: u16,
|
outs_size: u16,
|
||||||
insns: Vec<Instruction>,
|
insns: Vec<Instruction>,
|
||||||
|
parameter_names: Option<Vec<Option<DexString>>>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
registers_size,
|
registers_size,
|
||||||
ins_size,
|
ins_size,
|
||||||
outs_size,
|
outs_size,
|
||||||
insns,
|
insns,
|
||||||
|
parameter_names,
|
||||||
debug_info: vec![],
|
debug_info: vec![],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -95,6 +100,13 @@ impl Code {
|
||||||
for ins in &self.insns {
|
for ins in &self.insns {
|
||||||
strings.extend(ins.get_all_strings());
|
strings.extend(ins.get_all_strings());
|
||||||
}
|
}
|
||||||
|
if let Some(names) = &self.parameter_names {
|
||||||
|
for name in names {
|
||||||
|
if let Some(name) = name {
|
||||||
|
strings.insert(name.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
strings
|
strings
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
1
test.py
1
test.py
|
|
@ -21,6 +21,7 @@ with z.ZipFile(APK_NAME) as zipf:
|
||||||
|
|
||||||
apk = Apk()
|
apk = Apk()
|
||||||
apk.add_dex_file(dex)
|
apk.add_dex_file(dex)
|
||||||
|
exit()
|
||||||
|
|
||||||
clazz_id = IdType("Lcom/example/testapplication/ui/home/HomeViewModel;")
|
clazz_id = IdType("Lcom/example/testapplication/ui/home/HomeViewModel;")
|
||||||
proto_id = IdMethodType(IdType("Ljava/lang/String;"), [])
|
proto_id = IdMethodType(IdType("Ljava/lang/String;"), [])
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue