(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]]
|
[[package]]
|
||||||
name = "androscalpel"
|
name = "androscalpel"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
source = "git+ssh://git@git.mineau.eu/histausse/androscalpel.git?rev=610347554d7e46a9213f45b09b76ba7e2bce201b#610347554d7e46a9213f45b09b76ba7e2bce201b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"adler",
|
"adler",
|
||||||
"androscalpel_serializer",
|
"androscalpel_serializer",
|
||||||
|
|
@ -50,6 +51,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "androscalpel_serializer"
|
name = "androscalpel_serializer"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
source = "git+ssh://git@git.mineau.eu/histausse/androscalpel.git?rev=610347554d7e46a9213f45b09b76ba7e2bce201b#610347554d7e46a9213f45b09b76ba7e2bce201b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"androscalpel_serializer_derive",
|
"androscalpel_serializer_derive",
|
||||||
"log",
|
"log",
|
||||||
|
|
@ -58,6 +60,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "androscalpel_serializer_derive"
|
name = "androscalpel_serializer_derive"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
source = "git+ssh://git@git.mineau.eu/histausse/androscalpel.git?rev=610347554d7e46a9213f45b09b76ba7e2bce201b#610347554d7e46a9213f45b09b76ba7e2bce201b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
@ -126,6 +129,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "apk_frauder"
|
name = "apk_frauder"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
source = "git+ssh://git@git.mineau.eu/histausse/androscalpel.git?rev=610347554d7e46a9213f45b09b76ba7e2bce201b#610347554d7e46a9213f45b09b76ba7e2bce201b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"androscalpel_serializer",
|
"androscalpel_serializer",
|
||||||
"flate2",
|
"flate2",
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ edition = "2021"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
androscalpel = { git = "ssh://git@git.mineau.eu/histausse/androscalpel.git", rev = "ff2d630", features = ["code-analysis"] }
|
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 = "ff2d630"}
|
apk_frauder = { git = "ssh://git@git.mineau.eu/histausse/androscalpel.git", rev = "610347554d7e46a9213f45b09b76ba7e2bce201b"}
|
||||||
anyhow = { version = "1.0.95", features = ["backtrace"] }
|
anyhow = { version = "1.0.95", features = ["backtrace"] }
|
||||||
clap = { version = "4.5.27", features = ["derive"] }
|
clap = { version = "4.5.27", features = ["derive"] }
|
||||||
env_logger = "0.11.6"
|
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}"))
|
Some(format!("THESEUS_ADDR_{addr:08X}"))
|
||||||
}
|
}
|
||||||
_ => {
|
_ => None,
|
||||||
if addr == 0 {
|
|
||||||
Some(format!("DEBUG_{addr:08X}"))
|
|
||||||
} else {
|
|
||||||
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
|
let code = meth
|
||||||
.code
|
.code
|
||||||
.as_mut()
|
.as_mut()
|
||||||
|
|
@ -880,37 +875,37 @@ pub fn transform_method(meth: &mut Method, ref_data: &ReflectionData) -> Result<
|
||||||
if !meth.is_static {
|
if !meth.is_static {
|
||||||
// Non static method take 'this' as first argument
|
// Non static method take 'this' as first argument
|
||||||
code.insns.push(Instruction::MoveObject {
|
code.insns.push(Instruction::MoveObject {
|
||||||
from: code.registers_size - code.ins_size + i + register_info.get_nb_added_reg(),
|
from: code.registers_size - ins_size + i + register_info.get_nb_added_reg(),
|
||||||
to: code.registers_size - code.ins_size + i,
|
to: code.registers_size - ins_size + i,
|
||||||
});
|
});
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
for arg in &meth.descriptor.proto.get_parameters() {
|
for arg in &meth.descriptor.proto.get_parameters() {
|
||||||
if arg.is_class() || arg.is_array() {
|
if arg.is_class() || arg.is_array() {
|
||||||
code.insns.push(Instruction::MoveObject {
|
code.insns.push(Instruction::MoveObject {
|
||||||
from: code.registers_size - code.ins_size + i + register_info.get_nb_added_reg(),
|
from: code.registers_size - ins_size + i + register_info.get_nb_added_reg(),
|
||||||
to: code.registers_size - code.ins_size + i,
|
to: code.registers_size - ins_size + i,
|
||||||
});
|
});
|
||||||
i += 1;
|
i += 1;
|
||||||
} else if arg.is_long() || arg.is_double() {
|
} else if arg.is_long() || arg.is_double() {
|
||||||
code.insns.push(Instruction::MoveWide {
|
code.insns.push(Instruction::MoveWide {
|
||||||
from: code.registers_size - code.ins_size + i + register_info.get_nb_added_reg(),
|
from: code.registers_size - ins_size + i + register_info.get_nb_added_reg(),
|
||||||
to: code.registers_size - code.ins_size + i,
|
to: code.registers_size - ins_size + i,
|
||||||
});
|
});
|
||||||
i += 2;
|
i += 2;
|
||||||
} else {
|
} else {
|
||||||
code.insns.push(Instruction::Move {
|
code.insns.push(Instruction::Move {
|
||||||
from: code.registers_size - code.ins_size + i + register_info.get_nb_added_reg(),
|
from: code.registers_size - ins_size + i + register_info.get_nb_added_reg(),
|
||||||
to: code.registers_size - code.ins_size + i,
|
to: code.registers_size - ins_size + i,
|
||||||
});
|
});
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if i != code.ins_size {
|
if i != ins_size {
|
||||||
warn!(
|
warn!(
|
||||||
"Method {} argument do not match code ins_size ({})",
|
"Method {} argument do not match code ins_size ({})",
|
||||||
meth.descriptor.__str__(),
|
meth.descriptor.__str__(),
|
||||||
code.ins_size
|
ins_size
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Add the new code
|
// Add the new code
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue