123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- import {soName} from "../config";
- import {Il2CppImage} from "./struct/Il2CppImage";
- import {Il2CppClass} from "./struct/Il2CppClass";
- import {Il2CppType} from "./struct/Il2CppType";
- import {Il2CppFieldInfo} from "./struct/Il2CppFieldInfo";
- import {Il2CppPropertyInfo} from "./struct/Il2CppPropertyInfo";
- import {MethodInfo} from "./struct/MethodInfo";
- import {log} from "../logger";
- let nativeFunMap = new Map();
- export var il2cppApi = {
- nativeFunNotExistMap: new Map(),
- il2cpp_array_new:function (klass,size){
- let il2cpp_array_new = this.load("il2cpp_array_new",'pointer',['pointer','uint64']);
- return il2cpp_array_new(klass,size);
- },
- il2cpp_array_get_byte_length:function (array){
- let il2cpp_array_get_byte_length = this.load("il2cpp_array_get_byte_length",'uint32',['pointer']);
- return il2cpp_array_get_byte_length(array);
- },
- il2cpp_domain_get: function () {
- return this.load("il2cpp_domain_get", 'pointer', []);
- },
- il2cpp_thread_attach: function (domain) {
- return this.load("il2cpp_thread_attach", 'pointer', ['pointer']);
- },
- il2cpp_string_length: function (Il2cppString) {
- let il2cpp_string_length = this.load("il2cpp_string_length", "int", ['pointer']);
- return il2cpp_string_length(Il2cppString);
- },
- il2cpp_string_chars: function (Il2cppString) {
- let il2cpp_string_chars = this.load("il2cpp_string_chars", "pointer", ['pointer']);
- return il2cpp_string_chars(Il2cppString);
- },
- il2cpp_string_new: function (str) {
- let il2cpp_string_new = this.load("il2cpp_string_new", "pointer", ['pointer']);
- return il2cpp_string_new(str);
- },
- il2cpp_domain_get_assemblies: function (il2Cppdomain, size_t) {
- let il2cpp_domain_get_assemblies = this.load("il2cpp_domain_get_assemblies", 'pointer', ['pointer', 'pointer']);
- return il2cpp_domain_get_assemblies(il2Cppdomain, size_t);
- },
- il2cpp_gc_collect_a_little: function () {
- let il2cpp_gc_collect_a_little = this.load("il2cpp_gc_collect_a_little" +
- "", 'pointer', ['pointer', 'pointer']);
- return il2cpp_gc_collect_a_little(il2Cppdomain, size_t);
- },
- il2cpp_assembly_get_image: function (il2Cppassembly) {
- let il2cpp_assembly_get_image = this.load("il2cpp_assembly_get_image", 'pointer', ['pointer']);
- try {
- return new Il2CppImage(il2cpp_assembly_get_image(il2Cppassembly));
- } catch (e) {
- return new Il2CppImage(il2Cppassembly.readPointer());
- }
- },
- il2cpp_image_get_class_count: function (image) {
- // size_t il2cpp_image_get_class_count(const Il2CppImage * image)
- let il2cpp_image_get_class_count = this.load("il2cpp_image_get_class_count", "pointer", ['pointer']);
- if (il2cpp_image_get_class_count !== undefined) {
- return il2cpp_image_get_class_count(image).toUInt32();
- } else {
- return image.getOffsetTypeCount();
- }
- },
- il2cpp_image_get_name: function (Il2CppImage) {
- let il2cpp_image_get_name = this.load("il2cpp_image_get_name", "pointer", ['pointer']);
- return il2cpp_image_get_name(Il2CppImage);
- },
- il2cpp_image_get_class: function (il2CppImage, index) {
- // // const Il2CppClass* il2cpp_image_get_class(const Il2CppImage * image, size_t index)
- let il2cpp_image_get_class = this.load("il2cpp_image_get_class", 'pointer', ['pointer', 'int']);
- let il2cppImageGetClass = il2cpp_image_get_class(il2CppImage, index);
- return new Il2CppClass(il2cppImageGetClass);
- },
- il2cpp_class_get_type: function (il2CppClass) {
- let il2cpp_class_get_type = this.load("il2cpp_class_get_type", 'pointer', ["pointer"]);
- return new Il2CppType(il2cpp_class_get_type(il2CppClass));
- },
- il2cpp_class_get_element_class: function (cls) {
- let il2cpp_class_get_element_class = this.load("il2cpp_class_get_element_class", 'pointer', ["pointer"]);
- return new Il2CppClass(il2cpp_class_get_element_class(cls));
- },
- il2cpp_class_get_declaring_type: function (cls) {
- let il2cpp_class_get_declaring_type = this.load("il2cpp_class_get_declaring_type", 'pointer', ["pointer"]);
- return new Il2CppClass(il2cpp_class_get_declaring_type(cls));
- },
- il2cpp_class_from_type: function (Il2CppType) {
- let il2cpp_class_from_type = this.load("il2cpp_class_from_type", "pointer", ["pointer"]);
- if (Il2CppType === null) {
- return null;
- }
- return new Il2CppClass(il2cpp_class_from_type(Il2CppType));
- },
- il2cpp_class_get_image: function (klass) {
- let il2cpp_class_get_image = this.load("il2cpp_class_get_image", "pointer", ["pointer"]);
- return new Il2CppImage(il2cpp_class_get_image(klass));
- },
- il2cpp_class_from_name: function (Il2cppImage, nameSpaze, name) {
- let il2cpp_class_from_name = this.load("il2cpp_class_from_name", "pointer", ["pointer", "pointer", "pointer"]);
- let nameSpaze_t = Memory.allocUtf8String(nameSpaze);
- let name_t = Memory.allocUtf8String(name);
- return new Il2CppClass(il2cpp_class_from_name(Il2cppImage, nameSpaze_t, name_t));
- },
- il2cpp_class_enum_basetype: function (Il2CppClass) {
- let il2cpp_class_enum_basetype = this.load("il2cpp_class_enum_basetype", "pointer", ["pointer"]);
- return new Il2CppType(il2cpp_class_enum_basetype(Il2CppClass));
- },
- il2cpp_class_value_size: function (Il2CppClass, align) {
- let il2cpp_class_value_size = this.load("il2cpp_class_value_size", "int32", ["pointer", "pointer"]);
- return il2cpp_class_value_size(Il2CppClass);
- },
- il2cpp_class_get_flags: function (Il2CppClass) {
- let il2cpp_class_get_flags = this.load("il2cpp_class_get_flags", "int", ["pointer"]);
- return il2cpp_class_get_flags(Il2CppClass);
- },
- il2cpp_class_is_valuetype: function (Il2CppClass) {
- let il2cpp_class_is_valuetype = this.load("il2cpp_class_is_valuetype", "bool", ["pointer"]);
- return il2cpp_class_is_valuetype(Il2CppClass);
- },
- il2cpp_class_is_generic: function (Il2CppClass) {
- let il2cpp_class_is_generic = this.load("il2cpp_class_is_generic", "bool", ["pointer"]);
- return il2cpp_class_is_generic(Il2CppClass);
- },
- il2cpp_class_is_enum: function (Il2CppClass) {
- let il2cpp_class_is_enum = this.load("il2cpp_class_is_enum", "bool", ["pointer"]);
- return il2cpp_class_is_enum(Il2CppClass)
- },
- il2cpp_class_get_name: function (Il2CppClass) {
- let il2cpp_class_get_name = this.load("il2cpp_class_get_name", "pointer", ["pointer"]);
- return il2cpp_class_get_name(Il2CppClass);
- },
- il2cpp_class_get_parent: function (Il2CppClass) {
- let il2cpp_class_get_parent = this.load("il2cpp_class_get_parent", "pointer", ["pointer"]);
- return il2cpp_class_get_parent(Il2CppClass);
- },
- il2cpp_class_get_interfaces: function (cls, iter) {
- let il2cpp_class_get_interfaces = this.load("il2cpp_class_get_interfaces", 'pointer', ['pointer', 'pointer']);
- return new Il2CppClass(il2cpp_class_get_interfaces(cls, iter));
- },
- il2cpp_class_get_namespace: function (Il2CppClass) {
- let il2cpp_class_get_namespace = this.load("il2cpp_class_get_namespace", 'pointer', ['pointer']);
- return il2cpp_class_get_namespace(Il2CppClass);
- },
- il2cpp_class_num_fields: function (Il2CppClass) {
- let il2cpp_class_num_fields = this.load("il2cpp_class_num_fields", 'size_t', ['pointer']);
- return il2cpp_class_num_fields(Il2CppClass);
- },
- il2cpp_class_get_fields: function (Il2CppClass, iter) {
- let il2cpp_class_get_fields = this.load("il2cpp_class_get_fields", 'pointer', ['pointer', 'pointer']);
- return new Il2CppFieldInfo(il2cpp_class_get_fields(Il2CppClass, iter));
- },
- il2cpp_class_get_properties: function (Il2CppClass, iter) {
- let il2cpp_class_get_properties = this.load("il2cpp_class_get_properties", 'pointer', ['pointer', 'pointer']);
- return new Il2CppPropertyInfo(il2cpp_class_get_properties(Il2CppClass, iter));
- },
- il2cpp_class_get_methods: function (Il2CppClass, iter) {
- let il2cpp_class_get_methods = this.load("il2cpp_class_get_methods", 'pointer', ['pointer', 'pointer']);
- return new MethodInfo(il2cpp_class_get_methods(Il2CppClass, iter));
- },
- il2cpp_class_get_method_from_name: function (Il2CppClass, name, argsCount) {
- let il2cpp_class_get_method_from_name = this.load("il2cpp_class_get_method_from_name", 'pointer', ['pointer', 'pointer', "int"]);
- let name_t = Memory.allocUtf8String(name);
- return new MethodInfo(il2cpp_class_get_method_from_name(Il2CppClass, name_t, argsCount));
- },
- il2cpp_type_get_type: function (Il2CppType) {
- let il2cpp_type_get_type = this.load("il2cpp_type_get_type", 'int', ['pointer']);
- return il2cpp_type_get_type(Il2CppType);
- },
- /**
- * 非必要参数
- * @param Il2CppType
- * @returns {number|*}
- */
- il2cpp_type_is_byref: function (Il2CppType) {
- let il2cpp_type_is_byref = this.load("il2cpp_type_is_byref", "bool", ["pointer"]);
- // log(" il2cpp_type_is_byref:"+il2cpp_type_is_byref);
- if (il2cpp_type_is_byref !== undefined) {
- return il2cpp_type_is_byref(Il2CppType);
- }
- return Il2CppType.add(4).readS8();
- },
- il2cpp_type_get_attrs:function (Il2cppType){
- let il2cpp_type_get_attrs = this.load("il2cpp_type_get_attrs", "int32", ["pointer"]);
- return il2cpp_type_get_attrs(Il2cppType);
- },
- il2cpp_type_get_object: function (Il2CppType) {
- let il2cpp_type_get_object = this.load("il2cpp_type_get_object", 'pointer', ['pointer']);
- return il2cpp_type_get_object(Il2CppType);
- },
- il2cpp_type_get_name: function (Il2CppType) {
- let il2cpp_type_get_name = this.load("il2cpp_type_get_name", 'pointer', ['pointer']);
- try {
- return il2cpp_type_get_name(Il2CppType);
- } catch (e) {
- return null;
- }
- },
- il2cpp_field_static_get_value: function (FieldInfo, value) {
- let il2cpp_field_static_get_value = this.load("il2cpp_field_static_get_value", 'void', ['pointer', 'pointer']);
- return il2cpp_field_static_get_value(FieldInfo, value);
- },
- il2cpp_field_get_parent: function (FieldInfo) {
- let il2cpp_field_get_parent = this.load("il2cpp_field_get_parent", 'pointer', ['pointer']);
- return new Il2CppClass(il2cpp_field_get_parent(FieldInfo));
- },
- il2cpp_field_get_flags: function (FieldInfo) {
- let il2cpp_field_get_flags = this.load("il2cpp_field_get_flags", "int", ['pointer']);
- return il2cpp_field_get_flags(FieldInfo);
- },
- il2cpp_field_get_type: function (FieldInfo) {
- let il2cpp_field_get_type = this.load("il2cpp_field_get_type", "pointer", ['pointer']);
- return new Il2CppType(il2cpp_field_get_type(FieldInfo));
- },
- il2cpp_field_get_name: function (FieldInfo) {
- let il2cpp_field_get_name = this.load("il2cpp_field_get_name", "pointer", ['pointer']);
- return il2cpp_field_get_name(FieldInfo);
- },
- il2cpp_field_get_offset: function (FieldInfo) {
- let il2cpp_field_get_offset = this.load("il2cpp_field_get_offset", "size_t", ['pointer']);
- return il2cpp_field_get_offset(FieldInfo);
- },
- il2cpp_property_get_get_method: function (PropertyInfo) {
- let il2cpp_property_get_get_method = this.load("il2cpp_property_get_get_method", "pointer", ['pointer']);
- return new MethodInfo(il2cpp_property_get_get_method(PropertyInfo));
- },
- il2cpp_property_get_set_method: function (PropertyInfo) {
- let il2cpp_property_get_set_method = this.load("il2cpp_property_get_set_method", "pointer", ['pointer']);
- return new MethodInfo(il2cpp_property_get_set_method(PropertyInfo));
- },
- il2cpp_property_get_name: function (PropertyInfo) {
- let il2cpp_property_get_name = this.load("il2cpp_property_get_name", "pointer", ['pointer']);
- return il2cpp_property_get_name(PropertyInfo);
- },
- il2cpp_method_get_flags: function (method, iflags) {
- let il2cpp_method_get_flags_api = this.load("il2cpp_method_get_flags", "uint32", ['pointer', 'uint32']);
- return il2cpp_method_get_flags_api(method, iflags);
- },
- il2cpp_method_get_name: function (method) {
- let il2cpp_method_get_name = this.load("il2cpp_method_get_name", "pointer", ['pointer']);
- return il2cpp_method_get_name(method);
- },
- il2cpp_method_get_class: function (method) {
- let il2cpp_method_get_class = this.load("il2cpp_method_get_class", "pointer", ['pointer']);
- return il2cpp_method_get_class(method);
- },
- il2cpp_method_get_pointer: function (method) {
- //版本兼容有问题
- let il2cpp_method_get_pointer = this.load("il2cpp_method_get_pointer", "pointer", ['pointer']);
- if (il2cpp_method_get_pointer !== undefined) {
- return il2cpp_method_get_pointer(method);
- }
- return method.readPointer();
- },
- il2cpp_method_get_param_count: function (method) {
- let il2cpp_method_get_param_count = this.load("il2cpp_method_get_param_count", "uint32", ['pointer']);
- return il2cpp_method_get_param_count(method);
- },
- il2cpp_method_get_return_type: function (method) {
- let il2cpp_method_get_return_type = this.load("il2cpp_method_get_return_type", "pointer", ['pointer']);
- return new Il2CppType(il2cpp_method_get_return_type(method));
- },
- il2cpp_method_get_param: function (method, index) {
- let il2cpp_method_get_param = this.load("il2cpp_method_get_param", "pointer", ['pointer', 'uint32']);
- return new Il2CppType(il2cpp_method_get_param(method, index));
- },
- il2cpp_method_is_generic: function (method) {
- let il2cpp_method_is_generic = this.load("il2cpp_method_is_generic", "bool", ['pointer']);
- return il2cpp_method_is_generic(method);
- },
- il2cpp_array_length(arg) {
- let il2cpp_array_length = this.load("il2cpp_array_length", "uint32", ['pointer']);
- return il2cpp_array_length(arg);
- },
- il2cpp_method_is_inflated: function (method) {
- let il2cpp_method_is_inflated = this.load("il2cpp_method_is_inflated", "bool", ['pointer']);
- return il2cpp_method_is_inflated(method);
- },
- il2cpp_method_get_param_name: function (method, index) {
- let il2cpp_method_get_param_name = this.load("il2cpp_method_get_param_name", "pointer", ['pointer', 'uint32']);
- return il2cpp_method_get_param_name(method, index);
- },
- /**
- * 使用内存缓存加快dump速度
- * @param exportName
- * @param reType
- * @param argTypes
- * @returns {any}
- */
- load: function (exportName, reType, argTypes) {
- // new NativeFunction(Module.findExportByName(soName, "il2cpp_domain_get"), 'pointer', []);
- let cacheFun = nativeFunMap.get(exportName);
- if (cacheFun == null) {
- let isExist = this.nativeFunNotExistMap.get(exportName);
- if (isExist === -1) {
- return undefined;
- }
- let nativePointer = Module.findExportByName(soName, exportName);
- if (nativePointer == null) {
- this.nativeFunNotExistMap.set(exportName, -1);
- return undefined;
- } else {
- cacheFun = new NativeFunction(nativePointer, reType, argTypes);
- nativeFunMap.set(exportName, cacheFun);
- }
- }
- return nativeFunMap.get(exportName);
- },
- }
|