我对 JavaScript 不是很精通,因此在 Frida JS API 中遇到了一些麻烦。我所能看到的 Java.choose() 是异步的;这意味着它枚举了类的所有活动实例className
。但是,需要注意的是,它甚至可以在枚举完成之前提前返回。在我的应用程序中,我要求函数 (F)Java.choose()
仅在枚举结束时调用 return。因为在内部onMatch()
,我正在填充一个列表,该列表需要在F
返回给调用者之前完全填充。谷歌说我可以使用Promise
或await
序列化它。由于我有限的 JS-fu,我无法使任何解决方案发挥作用。请一位 JS 大师介入并抛出一些片段来拯救这个可怜的灵魂吗?
另外,另一个问题是,我不是来自函数式(事件驱动?)编程背景。序列化异步函数是 JS 世界中最后的手段吗?
const getObjectInstances = function(argument){
searchHeap(argument)
.then(function(class_instances){
console.log(class_instances);
//return class_instances;
})
.catch(function(error){
console.log("error");
})
}
const searchHeap = function(cls_name){
var class_instances = [];
Java.choose(cls_name, {
onMatch:function(instance){
console.log("Found instance" + instance);
class_instances.push(instance);
},
onComplete:function() {
console.log("search done");
}
});
}
我想要的是searchHeap()
仅在枚举完成时返回。否则,调用者会收到一个不完整的class_instances[]
列表。完成这项工作有多难?有没有更好的方法来实现同样的目标?