(finally) support scalar, wide and many-reg-caller
This commit is contained in:
parent
ed3385e611
commit
41cd10b392
3 changed files with 18 additions and 19 deletions
4
patcher/Cargo.lock
generated
4
patcher/Cargo.lock
generated
|
|
@ -35,6 +35,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "androscalpel"
|
||||
version = "0.1.0"
|
||||
source = "git+ssh://git@git.mineau.eu/histausse/androscalpel.git?rev=610347554d7e46a9213f45b09b76ba7e2bce201b#610347554d7e46a9213f45b09b76ba7e2bce201b"
|
||||
dependencies = [
|
||||
"adler",
|
||||
"androscalpel_serializer",
|
||||
|
|
@ -50,6 +51,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "androscalpel_serializer"
|
||||
version = "0.1.0"
|
||||
source = "git+ssh://git@git.mineau.eu/histausse/androscalpel.git?rev=610347554d7e46a9213f45b09b76ba7e2bce201b#610347554d7e46a9213f45b09b76ba7e2bce201b"
|
||||
dependencies = [
|
||||
"androscalpel_serializer_derive",
|
||||
"log",
|
||||
|
|
@ -58,6 +60,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "androscalpel_serializer_derive"
|
||||
version = "0.1.0"
|
||||
source = "git+ssh://git@git.mineau.eu/histausse/androscalpel.git?rev=610347554d7e46a9213f45b09b76ba7e2bce201b#610347554d7e46a9213f45b09b76ba7e2bce201b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -126,6 +129,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "apk_frauder"
|
||||
version = "0.1.0"
|
||||
source = "git+ssh://git@git.mineau.eu/histausse/androscalpel.git?rev=610347554d7e46a9213f45b09b76ba7e2bce201b#610347554d7e46a9213f45b09b76ba7e2bce201b"
|
||||
dependencies = [
|
||||
"androscalpel_serializer",
|
||||
"flate2",
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
androscalpel = { git = "ssh://git@git.mineau.eu/histausse/androscalpel.git", rev = "ff2d630", features = ["code-analysis"] }
|
||||
apk_frauder = { git = "ssh://git@git.mineau.eu/histausse/androscalpel.git", rev = "ff2d630"}
|
||||
androscalpel = { git = "ssh://git@git.mineau.eu/histausse/androscalpel.git", rev = "610347554d7e46a9213f45b09b76ba7e2bce201b", features = ["code-analysis"] }
|
||||
apk_frauder = { git = "ssh://git@git.mineau.eu/histausse/androscalpel.git", rev = "610347554d7e46a9213f45b09b76ba7e2bce201b"}
|
||||
anyhow = { version = "1.0.95", features = ["backtrace"] }
|
||||
clap = { version = "4.5.27", features = ["derive"] }
|
||||
env_logger = "0.11.6"
|
||||
|
|
|
|||
|
|
@ -657,13 +657,7 @@ pub fn labeling(_mth: &IdMethod, ins: &Instruction, addr: usize) -> Option<Strin
|
|||
{
|
||||
Some(format!("THESEUS_ADDR_{addr:08X}"))
|
||||
}
|
||||
_ => {
|
||||
if addr == 0 {
|
||||
Some(format!("DEBUG_{addr:08X}"))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -869,6 +863,7 @@ pub fn transform_method(meth: &mut Method, ref_data: &ReflectionData) -> Result<
|
|||
}
|
||||
}
|
||||
}
|
||||
let ins_size = code.ins_size(meth);
|
||||
let code = meth
|
||||
.code
|
||||
.as_mut()
|
||||
|
|
@ -880,37 +875,37 @@ pub fn transform_method(meth: &mut Method, ref_data: &ReflectionData) -> Result<
|
|||
if !meth.is_static {
|
||||
// Non static method take 'this' as first argument
|
||||
code.insns.push(Instruction::MoveObject {
|
||||
from: code.registers_size - code.ins_size + i + register_info.get_nb_added_reg(),
|
||||
to: code.registers_size - code.ins_size + i,
|
||||
from: code.registers_size - ins_size + i + register_info.get_nb_added_reg(),
|
||||
to: code.registers_size - ins_size + i,
|
||||
});
|
||||
i += 1;
|
||||
}
|
||||
for arg in &meth.descriptor.proto.get_parameters() {
|
||||
if arg.is_class() || arg.is_array() {
|
||||
code.insns.push(Instruction::MoveObject {
|
||||
from: code.registers_size - code.ins_size + i + register_info.get_nb_added_reg(),
|
||||
to: code.registers_size - code.ins_size + i,
|
||||
from: code.registers_size - ins_size + i + register_info.get_nb_added_reg(),
|
||||
to: code.registers_size - ins_size + i,
|
||||
});
|
||||
i += 1;
|
||||
} else if arg.is_long() || arg.is_double() {
|
||||
code.insns.push(Instruction::MoveWide {
|
||||
from: code.registers_size - code.ins_size + i + register_info.get_nb_added_reg(),
|
||||
to: code.registers_size - code.ins_size + i,
|
||||
from: code.registers_size - ins_size + i + register_info.get_nb_added_reg(),
|
||||
to: code.registers_size - ins_size + i,
|
||||
});
|
||||
i += 2;
|
||||
} else {
|
||||
code.insns.push(Instruction::Move {
|
||||
from: code.registers_size - code.ins_size + i + register_info.get_nb_added_reg(),
|
||||
to: code.registers_size - code.ins_size + i,
|
||||
from: code.registers_size - ins_size + i + register_info.get_nb_added_reg(),
|
||||
to: code.registers_size - ins_size + i,
|
||||
});
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
if i != code.ins_size {
|
||||
if i != ins_size {
|
||||
warn!(
|
||||
"Method {} argument do not match code ins_size ({})",
|
||||
meth.descriptor.__str__(),
|
||||
code.ins_size
|
||||
ins_size
|
||||
);
|
||||
}
|
||||
// Add the new code
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue