Как сериализовать Java.choose () в Frida JavaScript API? - PullRequest
1 голос
/ 25 сентября 2019

Я не очень хорошо разбираюсь в JavaScript, поэтому столкнулся с некоторыми проблемами в Frida JS API.Я вижу только Java.choose () async;это означает, что он перечисляет все живые экземпляры класса className.Тем не менее, предостережение заключается в том, что он может вернуться рано даже до того, как перечисление закончится.В моем приложении мне требуется, чтобы функция (F) вызывала Java.choose() return только в конце перечисления.Поскольку внутри onMatch(), я заполняю список, который должен быть заполнен полностью, прежде чем F вернется к своему вызывающему.Google говорит, что я могу использовать 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[].Насколько сложно заставить это работать?Есть ли лучший способ добиться того же?

...