parralelize the parsing
This commit is contained in:
parent
675135f522
commit
d47494f8f6
3 changed files with 61 additions and 4 deletions
52
Cargo.lock
generated
52
Cargo.lock
generated
|
|
@ -28,6 +28,7 @@ dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"pyo3 0.20.0",
|
"pyo3 0.20.0",
|
||||||
"pyo3-log",
|
"pyo3-log",
|
||||||
|
"rayon",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha1",
|
"sha1",
|
||||||
|
|
@ -144,6 +145,31 @@ dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam-deque"
|
||||||
|
version = "0.8.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-epoch",
|
||||||
|
"crossbeam-utils",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam-epoch"
|
||||||
|
version = "0.9.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-utils",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam-utils"
|
||||||
|
version = "0.8.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crypto-common"
|
name = "crypto-common"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
|
|
@ -164,6 +190,12 @@ dependencies = [
|
||||||
"crypto-common",
|
"crypto-common",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "either"
|
||||||
|
version = "1.10.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flate2"
|
name = "flate2"
|
||||||
version = "1.0.28"
|
version = "1.0.28"
|
||||||
|
|
@ -485,6 +517,26 @@ dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rayon"
|
||||||
|
version = "1.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
"rayon-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rayon-core"
|
||||||
|
version = "1.12.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-deque",
|
||||||
|
"crossbeam-utils",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.2.16"
|
version = "0.2.16"
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ apk_frauder = { version = "0.1.0", path = "../apk_frauder" }
|
||||||
log = "0.4.20"
|
log = "0.4.20"
|
||||||
pyo3 = { version = "0.20.0", features = ["anyhow"] }
|
pyo3 = { version = "0.20.0", features = ["anyhow"] }
|
||||||
pyo3-log = "0.8.3"
|
pyo3-log = "0.8.3"
|
||||||
|
rayon = "1.9.0"
|
||||||
serde = { version = "1.0.195", features = ["derive"] }
|
serde = { version = "1.0.195", features = ["derive"] }
|
||||||
serde_json = "1.0.111"
|
serde_json = "1.0.111"
|
||||||
sha1 = "0.10.6"
|
sha1 = "0.10.6"
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ use crate::Result;
|
||||||
use crate::*;
|
use crate::*;
|
||||||
use androscalpel_serializer::Instruction as InsFormat;
|
use androscalpel_serializer::Instruction as InsFormat;
|
||||||
use androscalpel_serializer::*;
|
use androscalpel_serializer::*;
|
||||||
|
use rayon::prelude::*;
|
||||||
|
|
||||||
/// Represent an apk.
|
/// Represent an apk.
|
||||||
#[pyclass]
|
#[pyclass]
|
||||||
|
|
@ -33,10 +34,13 @@ impl Apk {
|
||||||
/// Add the content of a dex file to the apk.
|
/// Add the content of a dex file to the apk.
|
||||||
pub fn add_dex_file(&mut self, data: &[u8]) -> Result<()> {
|
pub fn add_dex_file(&mut self, data: &[u8]) -> Result<()> {
|
||||||
let mut dex = DexFileReader::new(data)?;
|
let mut dex = DexFileReader::new(data)?;
|
||||||
for class in dex.get_class_defs() {
|
let classes = dex
|
||||||
let class = self.get_class_from_dex_file(class, &dex)?;
|
.get_class_defs()
|
||||||
self.classes.insert(class.descriptor.clone(), class);
|
.par_iter()
|
||||||
}
|
.map(|class| self.get_class_from_dex_file(class, &dex))
|
||||||
|
.map(|class| class.map(|class| (class.descriptor.clone(), class)))
|
||||||
|
.collect::<Result<Vec<_>, _>>()?;
|
||||||
|
self.classes.par_extend(classes);
|
||||||
self.not_referenced_strings
|
self.not_referenced_strings
|
||||||
.extend(dex.get_not_resolved_strings()?.into_iter().map(DexString));
|
.extend(dex.get_not_resolved_strings()?.into_iter().map(DexString));
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue