Что такое методы и -wrap0() для декомпиляции APK?
При декомпиляции APK с использованием dex2jar, а затем JD-GUI я обнаружил несколько вызовов неизвестных (и неопределенных) статических методов с именем -get0()
, -get1()
, -set0()
или даже -wrap0()
, Все эти вызовы имеют один параметр, ClassName.this
для регулярных занятий или this.this$0
для внутренних классов, ссылающихся на их "контейнерный" класс. Я вижу их и при взгляде на код smali, поэтому они действительно используются во время выполнения.
Нумерация тоже странная, с двумя разными getX()
с тем же X
возвращая значение другого типа.
Совершенно очевидно, что они используются как методы получения и установки для атрибутов класса, причем параметр является экземпляром, из которого атрибут должен быть получен. Это должно быть какое-то запутывание или оптимизация, я не знаю. Я могу видеть, к какому атрибуту обращаются, просто посчитав их.
Например, boolean b = Baz.-get0(this);
получает первый нестатический логический атрибут класса Baz
, Foo.-set5(fooInstance, -8);
эквивалентно fooInstance.sixthIntegerAttribute = -8;
Но что такое -wrap0()
метод, используемый для (это логический видимо)? У этого нет никаких параметров, поэтому он не принимает никаких экземпляров. В коде это в run()
внутреннего запуска и просто выглядит так: if (!ContainerClass.-wrap0()) { return; }
,