diff --git a/librz/bin/bfile.c b/librz/bin/bfile.c index ec9b2b2e75..55890b88ed 100644 --- a/librz/bin/bfile.c +++ b/librz/bin/bfile.c @@ -511,15 +511,16 @@ RZ_IPI RzBinClass *rz_bin_class_new(const char *name, const char *super, int vie return c; } -RZ_IPI void rz_bin_class_free(RzBinClass *k) { - if (k && k->name) { - free(k->name); - free(k->super); - rz_list_free(k->methods); - rz_list_free(k->fields); - free(k->visibility_str); - free(k); +RZ_API void rz_bin_class_free(RzBinClass *k) { + if (!k) { + return; } + free(k->name); + free(k->super); + rz_list_free(k->methods); + rz_list_free(k->fields); + free(k->visibility_str); + free(k); } RZ_API RzBinClass *rz_bin_file_add_class(RzBinFile *bf, const char *name, const char *super, int view) { diff --git a/librz/bin/bin.c b/librz/bin/bin.c index b3a3f1b620..7a81c2e21a 100644 --- a/librz/bin/bin.c +++ b/librz/bin/bin.c @@ -949,28 +949,57 @@ RZ_API void rz_bin_load_filter(RzBin *bin, ut64 rules) { /* RzBinField */ RZ_API RzBinField *rz_bin_field_new(ut64 paddr, ut64 vaddr, int size, const char *name, const char *comment, const char *format, bool format_named) { RzBinField *ptr = RZ_NEW0(RzBinField); - if (ptr) { - ptr->name = strdup(name); - ptr->comment = (comment && *comment) ? strdup(comment) : NULL; - ptr->format = (format && *format) ? strdup(format) : NULL; - ptr->format_named = format_named; - ptr->paddr = paddr; - ptr->size = size; - // ptr->visibility = any default visibility? - ptr->vaddr = vaddr; + if (!ptr) { + return NULL; } + + ptr->name = rz_str_new(name); + ptr->comment = rz_str_new(comment); + ptr->format = rz_str_new(format); + ptr->format_named = format_named; + ptr->paddr = paddr; + ptr->size = size; + ptr->vaddr = vaddr; return ptr; } RZ_API void rz_bin_field_free(RzBinField *field) { - if (field) { - free(field->name); - free(field->visibility_str); - free(field->type); - free(field->comment); - free(field->format); - free(field); + if (!field) { + return; } + free(field->name); + free(field->type); + free(field->comment); + free(field->format); + free(field); +} + +/* RzBinClassField */ +RZ_API RzBinClassField *rz_bin_class_field_new(ut64 vaddr, ut64 paddr, const char *name, const char *classname, const char *libname, const char *type) { + RzBinClassField *ptr = RZ_NEW0(RzBinClassField); + if (!ptr) { + return NULL; + } + + ptr->vaddr = vaddr ? vaddr : UT64_MAX; + ptr->paddr = paddr; + ptr->name = rz_str_new(name); + ptr->classname = rz_str_new(classname); + ptr->libname = rz_str_new(libname); + ptr->type = rz_str_new(type); + return ptr; +} + +RZ_API void rz_bin_class_field_free(RzBinClassField *field) { + if (!field) { + return; + } + free(field->name); + free(field->classname); + free(field->libname); + free(field->type); + free(field->visibility_str); + free(field); } RZ_API const char *rz_bin_get_meth_flag_string(ut64 flag, bool compact) { diff --git a/librz/bin/bobj.c b/librz/bin/bobj.c index fb68376265..c61bd372d6 100644 --- a/librz/bin/bobj.c +++ b/librz/bin/bobj.c @@ -257,7 +257,7 @@ static RzList /**/ *classes_from_symbols(RzBinFile *bf) { char *dn = sym->dname; char *fn = swiftField(dn, cn); if (fn) { - RzBinField *f = rz_bin_field_new(sym->paddr, sym->vaddr, sym->size, fn, NULL, NULL, false); + RzBinClassField *f = rz_bin_class_field_new(sym->vaddr, sym->paddr, fn, sym->classname, NULL, NULL); rz_list_append(c->fields, f); free(fn); } else { diff --git a/librz/bin/format/dex/dex.c b/librz/bin/format/dex/dex.c index 48df4a3294..df3974b559 100644 --- a/librz/bin/format/dex/dex.c +++ b/librz/bin/format/dex/dex.c @@ -1,5 +1,5 @@ -// SPDX-FileCopyrightText: 2021 RizinOrg -// SPDX-FileCopyrightText: 2021 deroad +// SPDX-FileCopyrightText: 2021-2023 RizinOrg +// SPDX-FileCopyrightText: 2021-2023 deroad // SPDX-License-Identifier: LGPL-3.0-only #include "dex.h" @@ -8,6 +8,8 @@ #define DEX_INVALID_CLASS "Lunknown_class;" #define DEX_INVALID_METHOD "unknown_method" +#define startswith(a, b) (!strncmp(a, b, strlen(b))) + typedef struct dex_access_flags_readable_t { ut32 flag; const char *readable; @@ -903,18 +905,34 @@ static ut64 dex_access_flags_to_bin_flags(ut64 access_flags) { return flags; } -static char *dex_resolve_library(const char *library) { - if (!library || library[0] != 'L') { +static char *demangle_java_and_free(char *mangled) { + if (!mangled) { return NULL; } - char *demangled = strdup(library + 1); - rz_str_replace_ch(demangled, '/', '.', 1); - if (RZ_STR_ISNOTEMPTY(demangled)) { - demangled[strlen(demangled) - 1] = 0; - } + char *demangled = rz_demangler_java(mangled); + free(mangled); return demangled; } +static void set_lib_and_class_name(char *mangled, char **out_class, char **out_lib) { + if (!mangled) { + return; + } + bool is_java_lang = startswith(mangled, "Ljava/lang"); + + char *object = demangle_java_and_free(mangled); + if (!object) { + return; + } + + *out_class = object; + if (!is_java_lang || startswith(object, "java.lang")) { + *out_lib = strdup(object); + } else { + *out_lib = rz_str_newf("java.lang.%s", object); + } +} + static RzBinSymbol *dex_method_to_symbol(RzBinDex *dex, DexEncodedMethod *encoded_method, DexMethodId *method_id, bool is_imported) { RzBinSymbol *symbol = RZ_NEW0(RzBinSymbol); if (!symbol) { @@ -923,9 +941,9 @@ static RzBinSymbol *dex_method_to_symbol(RzBinDex *dex, DexEncodedMethod *encode bool varargs = dex_is_varargs(encoded_method->access_flags); symbol->name = dex_resolve_string_id(dex, method_id->name_idx); - symbol->classname = dex_resolve_type_id(dex, method_id->class_idx); - symbol->libname = dex_resolve_library(symbol->classname); - symbol->dname = dex_resolve_proto_id(dex, symbol->name, method_id->proto_idx, varargs); + char *mangled = dex_resolve_type_id(dex, method_id->class_idx); + set_lib_and_class_name(mangled, &symbol->classname, &symbol->libname); + symbol->dname = demangle_java_and_free(dex_resolve_proto_id(dex, symbol->name, method_id->proto_idx, varargs)); symbol->bind = dex_is_static(encoded_method->access_flags) ? RZ_BIN_BIND_GLOBAL_STR : RZ_BIN_BIND_LOCAL_STR; symbol->is_imported = is_imported; symbol->visibility = encoded_method->access_flags & UT32_MAX; @@ -992,8 +1010,8 @@ static RzList /**/ *dex_resolve_methods_in_class(RzBinDex *dex, D return methods; } -static RzBinField *dex_field_to_bin_field(RzBinDex *dex, DexEncodedField *encoded_field, DexFieldId *field_id, bool is_static) { - RzBinField *field = RZ_NEW0(RzBinField); +static RzBinClassField *dex_field_to_bin_field(RzBinDex *dex, DexEncodedField *encoded_field, DexFieldId *field_id, bool is_static) { + RzBinClassField *field = RZ_NEW0(RzBinClassField); if (!field) { return NULL; } @@ -1007,15 +1025,17 @@ static RzBinField *dex_field_to_bin_field(RzBinDex *dex, DexEncodedField *encode field->paddr = encoded_field->offset; field->visibility = encoded_field->access_flags & UT32_MAX; field->visibility_str = rz_bin_dex_access_flags_readable(access_flags); + char *mangled = dex_resolve_type_id(dex, field_id->class_idx); + set_lib_and_class_name(mangled, &field->classname, &field->libname); field->name = dex_resolve_string_id(dex, field_id->name_idx); - field->type = dex_resolve_type_id(dex, field_id->type_idx); + field->type = demangle_java_and_free(dex_resolve_type_id(dex, field_id->type_idx)); field->flags = dex_access_flags_to_bin_flags(access_flags); return field; } -static RzList /**/ *dex_resolve_fields_in_class(RzBinDex *dex, DexClassDef *class_def, ut8 *inserted) { - RzList *fields = rz_list_newf((RzListFree)rz_bin_field_free); +static RzList /**/ *dex_resolve_fields_in_class(RzBinDex *dex, DexClassDef *class_def, ut8 *inserted) { + RzList *fields = rz_list_newf((RzListFree)rz_bin_class_field_free); if (!fields) { return NULL; } @@ -1033,9 +1053,9 @@ static RzList /**/ *dex_resolve_fields_in_class(RzBinDex *dex, Dex inserted[encoded_field->field_idx] = true; field_id = (DexFieldId *)rz_pvector_at(dex->field_ids, encoded_field->field_idx); - RzBinField *field = dex_field_to_bin_field(dex, encoded_field, field_id, true); + RzBinClassField *field = dex_field_to_bin_field(dex, encoded_field, field_id, true); if (!field || !rz_list_append(fields, field)) { - rz_bin_field_free(field); + rz_bin_class_field_free(field); break; } } @@ -1050,9 +1070,9 @@ static RzList /**/ *dex_resolve_fields_in_class(RzBinDex *dex, Dex inserted[encoded_field->field_idx] = true; field_id = (DexFieldId *)rz_pvector_at(dex->field_ids, encoded_field->field_idx); - RzBinField *field = dex_field_to_bin_field(dex, encoded_field, field_id, false); + RzBinClassField *field = dex_field_to_bin_field(dex, encoded_field, field_id, false); if (!field || !rz_list_append(fields, field)) { - rz_bin_field_free(field); + rz_bin_class_field_free(field); break; } } @@ -1066,8 +1086,8 @@ static RzBinSymbol *dex_field_to_symbol(RzBinDex *dex, DexEncodedField *encoded_ } field->name = dex_resolve_string_id(dex, field_id->name_idx); - field->classname = dex_resolve_type_id(dex, field_id->class_idx); - field->libname = dex_resolve_library(field->classname); + char *mangled = dex_resolve_type_id(dex, field_id->class_idx); + set_lib_and_class_name(mangled, &field->classname, &field->libname); field->bind = dex_is_static(encoded_field->access_flags) ? RZ_BIN_BIND_GLOBAL_STR : RZ_BIN_BIND_LOCAL_STR; field->is_imported = false; field->visibility = encoded_field->access_flags & UT32_MAX; @@ -1122,18 +1142,6 @@ static RzList /**/ *dex_resolve_fields_in_class_as_symbols(RzBinD return fields; } -static void free_rz_bin_class(RzBinClass *bclass) { - if (!bclass) { - return; - } - rz_list_free(bclass->methods); - rz_list_free(bclass->fields); - free(bclass->name); - free(bclass->super); - free(bclass->visibility_str); - free(bclass); -} - /** * \brief Returns a RzList containing the dex classes */ @@ -1156,7 +1164,7 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_classes(RZ_NONNULL RzBinDex return NULL; } - classes = rz_list_newf((RzListFree)free_rz_bin_class); + classes = rz_list_newf((RzListFree)rz_bin_class_free); if (!classes) { free(inserted_fields); free(inserted_methods); @@ -1170,17 +1178,16 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_classes(RZ_NONNULL RzBinDex break; } - bclass->name = dex_resolve_type_id(dex, class_def->class_idx); - bclass->super = dex_resolve_type_id(dex, class_def->superclass_idx); + bclass->name = demangle_java_and_free(dex_resolve_type_id(dex, class_def->class_idx)); + bclass->super = demangle_java_and_free(dex_resolve_type_id(dex, class_def->superclass_idx)); bclass->visibility = class_def->access_flags; bclass->visibility_str = rz_bin_dex_access_flags_readable(class_def->access_flags); - bclass->index = class_def->class_idx; bclass->addr = class_def->offset; bclass->methods = dex_resolve_methods_in_class(dex, class_def, inserted_methods); bclass->fields = dex_resolve_fields_in_class(dex, class_def, inserted_fields); if (!rz_list_append(classes, bclass)) { - free_rz_bin_class(bclass); + rz_bin_class_free(bclass); break; } } @@ -1236,9 +1243,9 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_sections(RZ_NONNULL RzBinD } /** - * \brief Returns a RzList containing the dex fields + * \brief Returns a RzList containing the dex fields */ -RZ_API RZ_OWN RzList /**/ *rz_bin_dex_fields(RZ_NONNULL RzBinDex *dex) { +RZ_API RZ_OWN RzList /**/ *rz_bin_dex_fields(RZ_NONNULL RzBinDex *dex) { rz_return_val_if_fail(dex, NULL); DexClassDef *class_def; @@ -1251,7 +1258,7 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_fields(RZ_NONNULL RzBinDex * return NULL; } - fields = rz_list_newf((RzListFree)rz_bin_field_free); + fields = rz_list_newf((RzListFree)rz_bin_class_field_free); if (!fields) { free(inserted); return NULL; @@ -1331,8 +1338,8 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_symbols(RZ_NONNULL RzBinDex } field->name = dex_resolve_string_id(dex, field_id->name_idx); - field->classname = dex_resolve_type_id(dex, field_id->class_idx); - field->libname = dex_resolve_library(field->classname); + char *mangled = dex_resolve_type_id(dex, field_id->class_idx); + set_lib_and_class_name(mangled, &field->classname, &field->libname); field->bind = RZ_BIN_BIND_WEAK_STR; field->type = RZ_BIN_TYPE_FIELD_STR; field->is_imported = true; @@ -1356,9 +1363,9 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_symbols(RZ_NONNULL RzBinDex } method->name = dex_resolve_string_id(dex, method_id->name_idx); - method->classname = dex_resolve_type_id(dex, method_id->class_idx); - method->libname = dex_resolve_library(method->classname); - method->dname = dex_resolve_proto_id(dex, method->name, method_id->proto_idx, false); + char *mangled = dex_resolve_type_id(dex, method_id->class_idx); + set_lib_and_class_name(mangled, &method->classname, &method->libname); + method->dname = demangle_java_and_free(dex_resolve_proto_id(dex, method->name, method_id->proto_idx, false)); method->bind = RZ_BIN_BIND_WEAK_STR; method->is_imported = true; method->type = RZ_BIN_TYPE_METH_STR; @@ -1437,28 +1444,12 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_imports(RZ_NONNULL RzBinDex break; } - char *object = dex_resolve_type_id(dex, field_id->class_idx); - if (RZ_STR_ISEMPTY(object)) { - free(object); - free(import); - break; - } - rz_str_replace_char(object, ';', 0); - - char *class_name = (char *)rz_str_rchr(object, NULL, '/'); - if (class_name) { - class_name[0] = 0; - class_name++; - } - rz_str_replace_ch(object, '/', '.', 1); - import->name = dex_resolve_string_id(dex, field_id->name_idx); - import->libname = class_name ? strdup(object + 1) : NULL; - import->classname = strdup(class_name ? class_name : object + 1); + char *mangled = dex_resolve_type_id(dex, field_id->class_idx); + set_lib_and_class_name(mangled, &import->classname, &import->libname); import->bind = RZ_BIN_BIND_WEAK_STR; import->type = RZ_BIN_TYPE_FIELD_STR; import->ordinal = ordinal; - free(object); if (!rz_list_append(imports, import)) { rz_bin_import_free(import); @@ -1485,30 +1476,14 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_imports(RZ_NONNULL RzBinDex break; } - char *object = dex_resolve_type_id(dex, method_id->class_idx); - if (RZ_STR_ISEMPTY(object)) { - free(object); - rz_bin_import_free(import); - break; - } - rz_str_replace_char(object, ';', 0); - - char *class_name = (char *)rz_str_rchr(object, NULL, '/'); - if (class_name) { - class_name[0] = 0; - class_name++; - } - rz_str_replace_ch(object, '/', '.', 1); - char *name = dex_resolve_string_id(dex, method_id->name_idx); import->name = dex_resolve_proto_id(dex, name, method_id->proto_idx, false); - import->libname = class_name ? strdup(object + 1) : NULL; - import->classname = strdup(class_name ? class_name : object + 1); + char *mangled = dex_resolve_type_id(dex, method_id->class_idx); + set_lib_and_class_name(mangled, &import->classname, &import->libname); import->bind = RZ_BIN_BIND_WEAK_STR; import->type = RZ_BIN_TYPE_FUNC_STR; import->ordinal = ordinal; free(name); - free(object); if (!rz_list_append(imports, import)) { rz_bin_import_free(import); @@ -1574,7 +1549,7 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_dex_libraries(RZ_NONNULL RzBinDex *dex } char *object = dex_resolve_type_id(dex, method_id->class_idx); - if (RZ_STR_ISEMPTY(object) || *object != 'L' || !strncmp(object, "Ljava/", strlen("Ljava/"))) { + if (RZ_STR_ISEMPTY(object) || *object != 'L' || startswith(object, "Ljava/")) { free(object); continue; } @@ -2028,19 +2003,19 @@ RZ_API RZ_OWN char *rz_bin_dex_version(RZ_NONNULL RzBinDex *dex) { rz_return_val_if_fail(dex, NULL); // https://cs.android.com/android/platform/superproject/+/master:dalvik/dx/src/com/android/dex/DexFormat.java;l=55;bpv=1;bpt=0 // https://developer.android.com/studio/releases/platforms - if (!strncmp((char *)dex->version, "009", 3)) { + if (startswith((char *)dex->version, "009")) { return strdup("Android M3 release (Nov-Dec 2007)"); - } else if (!strncmp((char *)dex->version, "013", 3)) { + } else if (startswith((char *)dex->version, "013")) { return strdup("Android M5 release (Feb-Mar 2008)"); - } else if (!strncmp((char *)dex->version, "035", 3)) { + } else if (startswith((char *)dex->version, "035")) { return strdup("Android 3.2 (API level 13 and earlier)"); - } else if (!strncmp((char *)dex->version, "037", 3)) { + } else if (startswith((char *)dex->version, "037")) { return strdup("Android 7 (API level 24 and earlier)"); - } else if (!strncmp((char *)dex->version, "038", 3)) { + } else if (startswith((char *)dex->version, "038")) { return strdup("Android 8 (API level 26 and earlier)"); - } else if (!strncmp((char *)dex->version, "039", 3)) { + } else if (startswith((char *)dex->version, "039")) { return strdup("Android 9 (API level 28 and earlier)"); - } else if (!strncmp((char *)dex->version, "040", 3)) { + } else if (startswith((char *)dex->version, "040")) { return strdup("Android 10+ (Aug 2019)"); } return NULL; diff --git a/librz/bin/format/dex/dex.h b/librz/bin/format/dex/dex.h index 77d94d9905..ba76dee89e 100644 --- a/librz/bin/format/dex/dex.h +++ b/librz/bin/format/dex/dex.h @@ -1,5 +1,5 @@ -// SPDX-FileCopyrightText: 2021 RizinOrg -// SPDX-FileCopyrightText: 2021 deroad +// SPDX-FileCopyrightText: 2021-2023 RizinOrg +// SPDX-FileCopyrightText: 2021-2023 deroad // SPDX-License-Identifier: LGPL-3.0-only #ifndef RZ_DEX_H @@ -209,7 +209,7 @@ RZ_API ut64 rz_bin_dex_debug_info(RZ_NONNULL RzBinDex *dex); RZ_API RZ_OWN RzList /**/ *rz_bin_dex_strings(RZ_NONNULL RzBinDex *dex); RZ_API RZ_OWN RzList /**/ *rz_bin_dex_classes(RZ_NONNULL RzBinDex *dex); -RZ_API RZ_OWN RzList /**/ *rz_bin_dex_fields(RZ_NONNULL RzBinDex *dex); +RZ_API RZ_OWN RzList /**/ *rz_bin_dex_fields(RZ_NONNULL RzBinDex *dex); RZ_API RZ_OWN RzList /**/ *rz_bin_dex_sections(RZ_NONNULL RzBinDex *dex); RZ_API RZ_OWN RzList /**/ *rz_bin_dex_symbols(RZ_NONNULL RzBinDex *dex); RZ_API RZ_OWN RzList /**/ *rz_bin_dex_imports(RZ_NONNULL RzBinDex *dex); diff --git a/librz/bin/format/java/class_bin.c b/librz/bin/format/java/class_bin.c index db9a67745a..f279a9be2c 100644 --- a/librz/bin/format/java/class_bin.c +++ b/librz/bin/format/java/class_bin.c @@ -1,9 +1,12 @@ -// SPDX-FileCopyrightText: 2021 deroad +// SPDX-FileCopyrightText: 2021-2023 RizinOrg +// SPDX-FileCopyrightText: 2021-2023 deroad // SPDX-License-Identifier: LGPL-3.0-only #include "class_bin.h" #include "class_private.h" +#define startswith(a, b) (!strncmp(a, b, strlen(b))) + #define ACCESS_FLAG_MASK_SRC (ACCESS_FLAG_PUBLIC | ACCESS_FLAG_PRIVATE | ACCESS_FLAG_PROTECTED | ACCESS_FLAG_STATIC | ACCESS_FLAG_FINAL) #define CLASS_ACCESS_FLAGS_SIZE 16 @@ -386,10 +389,10 @@ RZ_API RZ_BORROW const char *rz_bin_java_class_language(RZ_NONNULL RzBinJavaClas continue; } string = java_constant_pool_stringify(cpool); - if (string && !strncmp(string, "kotlin/jvm", 10)) { + if (string && startswith(string, "kotlin/jvm")) { language = "kotlin"; break; - } else if (string && !strncmp(string, "org/codehaus/groovy/runtime", 27)) { + } else if (string && startswith(string, "org/codehaus/groovy/runtime")) { language = "groovy"; break; } @@ -471,7 +474,13 @@ RZ_API RZ_OWN char *rz_bin_java_class_super(RZ_NONNULL RzBinJavaClass *bin) { RZ_LOG_ERROR("java bin: unknown super name at constant pool index %u\n", bin->this_class); return strdup("unknown_super"); } - return java_class_constant_pool_stringify_at(bin, index); + char *tmp = java_class_constant_pool_stringify_at(bin, index); + if (!tmp) { + return NULL; + } + char *class_name = rz_str_newf("L%s;", tmp); + free(tmp); + return class_name; } RZ_API ut32 rz_bin_java_class_access_flags(RZ_NONNULL RzBinJavaClass *bin) { @@ -744,7 +753,7 @@ RZ_API void rz_bin_java_class_as_source_code(RZ_NONNULL RzBinJavaClass *bin, RZ_ if (bin->access_flags & ACCESS_FLAG_SUPER) { tmp = rz_bin_java_class_super(bin); - if (strcmp(tmp, "java/lang/Object") != 0) { + if (strcmp(tmp, "Ljava/lang/Object;") != 0) { rz_str_replace_char(tmp, '/', '.'); rz_strbuf_appendf(sb, " extends %s", tmp); } @@ -1046,6 +1055,37 @@ static char *add_class_name_to_name(char *name, char *classname) { return strdup(name); } +static char *demangle_java_and_free(char *mangled) { + if (!mangled) { + return NULL; + } + if (startswith(mangled, "unknown_")) { + return mangled; + } + char *demangled = rz_demangler_java(mangled); + free(mangled); + return demangled; +} + +static void set_lib_and_class_name(char *mangled, char **out_class, char **out_lib) { + if (!mangled) { + return; + } + bool is_java_lang = startswith(mangled, "Ljava/lang"); + + char *object = demangle_java_and_free(mangled); + if (!object) { + return; + } + + *out_class = object; + if (is_java_lang && !startswith(object, "java.lang")) { + *out_lib = rz_str_newf("java.lang.%s", object); + } else { + *out_lib = strdup(object); + } +} + /** * \brief Returns a RzList containing the class methods */ @@ -1096,8 +1136,8 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_methods_as_symbols(R desc = strdup("(?)V"); } - symbol->classname = rz_bin_java_class_name(bin); - symbol->dname = rz_str_newf("%s%s", method_name, desc); + set_lib_and_class_name(rz_bin_java_class_name(bin), &symbol->classname, &symbol->libname); + symbol->dname = demangle_java_and_free(rz_str_newf("%s%s", method_name, desc)); symbol->name = add_class_name_to_name(method_name, symbol->classname); symbol->size = size; symbol->bind = java_method_is_global(method) ? RZ_BIN_BIND_GLOBAL_STR : RZ_BIN_BIND_LOCAL_STR; @@ -1105,7 +1145,6 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_methods_as_symbols(R symbol->ordinal = rz_list_length(list); symbol->visibility = method->access_flags; symbol->visibility_str = java_method_access_flags_readable(method); - symbol->libname = rz_demangler_java(symbol->classname); symbol->method_flags = java_access_flags_to_bin_flags(method->access_flags); free(desc); free(method_name); @@ -1255,8 +1294,10 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_fields_as_symbols(RZ free(field_name); continue; } - symbol->classname = rz_bin_java_class_name(bin); + + set_lib_and_class_name(rz_bin_java_class_name(bin), &symbol->classname, &symbol->libname); symbol->name = add_class_name_to_name(field_name, symbol->classname); + symbol->dname = rz_demangler_java(symbol->name); symbol->size = 0; symbol->bind = java_field_is_global(field) ? RZ_BIN_BIND_GLOBAL_STR : RZ_BIN_BIND_LOCAL_STR; symbol->type = RZ_BIN_TYPE_OBJECT_STR; @@ -1272,12 +1313,12 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_fields_as_symbols(RZ } /** - * \brief Returns a RzList containing the class fields + * \brief Returns a RzList containing the class fields */ -RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_fields_as_binfields(RZ_NONNULL RzBinJavaClass *bin) { +RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_fields_as_binfields(RZ_NONNULL RzBinJavaClass *bin) { rz_return_val_if_fail(bin, NULL); - RzList *list = rz_list_newf((RzListFree)rz_bin_field_free); + RzList *list = rz_list_newf((RzListFree)rz_bin_class_field_free); if (!list) { return NULL; } @@ -1299,11 +1340,14 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_fields_as_binfields(R if (!name) { continue; } - RzBinField *bf = rz_bin_field_new(field->offset, field->offset, 0, name, NULL, NULL, false); + + char *ftype = demangle_java_and_free(java_class_constant_pool_stringify_at(bin, field->descriptor_index)); + RzBinClassField *bf = rz_bin_class_field_new(field->offset, field->offset, name, NULL, NULL, ftype); + free(ftype); if (bf) { + set_lib_and_class_name(rz_bin_java_class_name(bin), &bf->classname, &bf->libname); bf->visibility = field->access_flags; bf->flags = java_access_flags_to_bin_flags(field->access_flags); - bf->type = java_class_constant_pool_stringify_at(bin, field->descriptor_index); rz_list_append(list, bf); } free(name); @@ -1440,7 +1484,6 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_const_pool_as_symbol return NULL; } char *method_name, *classname; - bool is_main; ut16 class_index, name_and_type_index, name_index, descriptor_index, class_name_index; if (bin->constant_pool) { for (ut32 i = 0; i < bin->constant_pool_count; ++i) { @@ -1479,22 +1522,26 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_const_pool_as_symbol if (!method_name) { method_name = strdup("unknown_method"); } - is_main = !strcmp(method_name, "main"); + classname = java_class_constant_pool_stringify_at(bin, class_name_index); + if (!classname) { + classname = strdup("unknown_class"); + } + + set_lib_and_class_name(rz_str_newf("L%s;", classname), &symbol->classname, &symbol->libname); symbol->name = add_class_name_to_name(method_name, symbol->classname); if (desc[0] == '(') { symbol->dname = rz_str_newf("%s%s", method_name, desc); } else { symbol->dname = strdup(method_name); } - symbol->classname = rz_str_newf("L%s;", classname); - symbol->libname = classname; - rz_str_replace_ch(symbol->libname, '/', '.', 1); + symbol->dname = demangle_java_and_free(symbol->dname); symbol->bind = RZ_BIN_BIND_IMPORT_STR; - symbol->type = is_main ? RZ_BIN_TYPE_FUNC_STR : import_type(cpool); + symbol->type = !strcmp(method_name, "main") ? RZ_BIN_TYPE_FUNC_STR : import_type(cpool); symbol->ordinal = i; symbol->is_imported = true; free(desc); + free(classname); free(method_name); rz_list_append(list, symbol); } @@ -1546,26 +1593,19 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_const_pool_as_import RzBinImport *import = RZ_NEW0(RzBinImport); if (!import) { rz_warn_if_reached(); + free(object); continue; } - char *class_name = (char *)rz_str_rchr(object, NULL, '/'); - if (class_name) { - class_name[0] = 0; - class_name++; - } - rz_str_replace_ch(object, '/', '.', 1); - - import->classname = strdup(class_name ? class_name : object); - import->libname = class_name ? strdup(object) : NULL; + set_lib_and_class_name(rz_str_newf("L%s;", object), &import->classname, &import->libname); import->name = java_class_constant_pool_stringify_at(bin, name_index); is_main = import->name && !strcmp(import->name, "main"); import->bind = is_main ? RZ_BIN_BIND_GLOBAL_STR : NULL; import->type = is_main ? RZ_BIN_TYPE_FUNC_STR : import_type(cpool); import->descriptor = java_class_constant_pool_stringify_at(bin, descriptor_index); import->ordinal = i; - free(object); rz_list_append(imports, import); + free(object); } } @@ -1575,24 +1615,31 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_const_pool_as_import continue; } - RzBinImport *import = RZ_NEW0(RzBinImport); - if (!import) { - rz_warn_if_reached(); - continue; - } const ConstPool *cpool = java_class_constant_pool_at(bin, bin->interfaces[i]->index); if (!cpool || java_constant_pool_resolve(cpool, &class_index, NULL) != 1) { RZ_LOG_ERROR("java bin: can't resolve interface with constant pool index %u\n", i); - rz_bin_import_free(import); continue; } - import->classname = java_class_constant_pool_stringify_at(bin, class_index); + char *object = java_class_constant_pool_stringify_at(bin, class_index); + if (!object) { + continue; + } + + RzBinImport *import = RZ_NEW0(RzBinImport); + if (!import) { + rz_warn_if_reached(); + free(object); + continue; + } + + set_lib_and_class_name(rz_str_newf("L%s;", object), &import->classname, &import->libname); import->name = strdup("*"); import->bind = RZ_BIN_BIND_WEAK_STR; import->type = RZ_BIN_TYPE_IFACE_STR; import->ordinal = i; rz_list_append(imports, import); + free(object); } } @@ -1953,3 +2000,37 @@ RZ_API void rz_bin_java_class_interfaces_as_json(RZ_NONNULL RzBinJavaClass *bin, } pj_end(j); } + +/** + * \brief Returns a RzList containing only the class of the bin + */ +RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_as_classes(RZ_NONNULL RzBinJavaClass *bin) { + rz_return_val_if_fail(bin, NULL); + + RzBinClass *bclass = NULL; + RzList *list = rz_list_newf((RzListFree)rz_bin_class_free); + if (!list) { + return NULL; + } + + bclass = RZ_NEW0(RzBinClass); + if (!bclass) { + rz_list_free(list); + return NULL; + } + rz_list_append(list, bclass); + + bclass->name = demangle_java_and_free(rz_bin_java_class_name(bin)); + bclass->super = demangle_java_and_free(rz_bin_java_class_super(bin)); + bclass->visibility = rz_bin_java_class_access_flags(bin); + bclass->visibility_str = rz_bin_java_class_access_flags_readable(bin, ACCESS_FLAG_MASK_ALL_NO_SUPER); + + bclass->methods = rz_bin_java_class_methods_as_symbols(bin); + bclass->fields = rz_bin_java_class_fields_as_binfields(bin); + if (!bclass->methods || !bclass->fields) { + rz_list_free(list); + return NULL; + } + + return list; +} \ No newline at end of file diff --git a/librz/bin/format/java/class_bin.h b/librz/bin/format/java/class_bin.h index 63a6a68ae6..3e01bfdaa7 100644 --- a/librz/bin/format/java/class_bin.h +++ b/librz/bin/format/java/class_bin.h @@ -1,4 +1,5 @@ -// SPDX-FileCopyrightText: 2021 deroad +// SPDX-FileCopyrightText: 2021-2023 RizinOrg +// SPDX-FileCopyrightText: 2021-2023 deroad // SPDX-License-Identifier: LGPL-3.0-only #ifndef RZ_BIN_JAVA_CLASS_H @@ -86,7 +87,7 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_methods_as_symbols(R RZ_API void rz_bin_java_class_methods_as_text(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL RzStrBuf *sb); RZ_API void rz_bin_java_class_methods_as_json(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL PJ *j); RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_fields_as_symbols(RZ_NONNULL RzBinJavaClass *bin); -RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_fields_as_binfields(RZ_NONNULL RzBinJavaClass *bin); +RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_fields_as_binfields(RZ_NONNULL RzBinJavaClass *bin); RZ_API void rz_bin_java_class_fields_as_text(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL RzStrBuf *sb); RZ_API void rz_bin_java_class_fields_as_json(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL PJ *j); RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_const_pool_as_symbols(RZ_NONNULL RzBinJavaClass *bin); @@ -97,5 +98,6 @@ RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_as_sections(RZ_NONN RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_as_libraries(RZ_NONNULL RzBinJavaClass *bin); RZ_API void rz_bin_java_class_interfaces_as_text(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL RzStrBuf *sb); RZ_API void rz_bin_java_class_interfaces_as_json(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL PJ *j); +RZ_API RZ_OWN RzList /**/ *rz_bin_java_class_as_classes(RZ_NONNULL RzBinJavaClass *bin); #endif /* RZ_BIN_JAVA_CLASS_H */ diff --git a/librz/bin/format/objc/mach0_classes.c b/librz/bin/format/objc/mach0_classes.c index 7cfa9acab1..98121041ce 100644 --- a/librz/bin/format/objc/mach0_classes.c +++ b/librz/bin/format/objc/mach0_classes.c @@ -190,9 +190,9 @@ static void copy_sym_name_with_namespace(char *class_name, char *read_name, RzBi } static int sort_by_offset(const void *_a, const void *_b) { - RzBinField *a = (RzBinField *)_a; - RzBinField *b = (RzBinField *)_b; - return a->offset - b->offset; + RzBinClassField *a = (RzBinClassField *)_a; + RzBinClassField *b = (RzBinClassField *)_b; + return a->paddr - b->paddr; } static bool read_sivarlist(struct MACH0_(SIVarList) * il, RzBuffer *buf, ut64 base, bool bigendian) { @@ -219,7 +219,7 @@ static void get_ivar_list_t(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzBinClass int len; bool bigendian; mach0_ut ivar_offset; - RzBinField *field = NULL; + RzBinClassField *field = NULL; ut8 offs[sizeof(mach0_ut)] = { 0 }; if (!bf || !bf->o || !bf->o->bin_obj || !bf->o->info) { @@ -250,7 +250,7 @@ static void get_ivar_list_t(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzBinClass if (!r) { return; } - field = RZ_NEW0(RzBinField); + field = rz_bin_class_field_new(UT64_MAX, UT64_MAX, NULL, klass->name, NULL, NULL); memset(&i, '\0', sizeof(struct MACH0_(SIVar))); if (r + left < r || r + sizeof(struct MACH0_(SIVar)) < r) { goto error; @@ -280,7 +280,7 @@ static void get_ivar_list_t(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzBinClass goto error; } ivar_offset = rz_read_ble(offs, bigendian, 8 * sizeof(mach0_ut)); - field->offset = ivar_offset; + field->paddr = ivar_offset; } r = va2pa(i.name, NULL, &left, bf); if (r) { @@ -307,7 +307,7 @@ static void get_ivar_list_t(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzBinClass name[name_len] = 0; } // XXX the field name shouldnt contain the class name - field->name = rz_str_newf("%s::%s%s", klass->name, "(ivar)", name); + field->name = rz_str_newf("%s::(ivar)%s", klass->name, name); RZ_FREE(name); } @@ -349,16 +349,11 @@ static void get_ivar_list_t(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzBinClass if (!rz_list_empty(klass->fields)) { rz_list_sort(klass->fields, sort_by_offset); } - RzBinField *isa_field = RZ_NEW0(RzBinField); - isa_field->name = strdup("isa"); - isa_field->size = sizeof(mach0_ut); - isa_field->type = strdup("struct objc_class *"); - isa_field->vaddr = 0; - isa_field->offset = 0; - rz_list_prepend(klass->fields, isa_field); + field = rz_bin_class_field_new(UT64_MAX, UT64_MAX, "isa", klass->name, NULL, "struct objc_class *"); + rz_list_prepend(klass->fields, field); return; error: - rz_bin_field_free(field); + rz_bin_class_field_free(field); } /////////////////////////////////////////////////////////////////////////////// @@ -370,7 +365,7 @@ static void get_objc_property_list(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzB char *name = NULL; int len; bool bigendian; - RzBinField *property = NULL; + RzBinClassField *property = NULL; ut8 sopl[sizeof(struct MACH0_(SObjcPropertyList))] = { 0 }; ut8 sop[sizeof(struct MACH0_(SObjcProperty))] = { 0 }; @@ -415,7 +410,7 @@ static void get_objc_property_list(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzB return; } - if (!(property = RZ_NEW0(RzBinField))) { + if (!(property = rz_bin_class_field_new(UT64_MAX, UT64_MAX, NULL, klass->name, NULL, NULL))) { return; } @@ -465,8 +460,7 @@ static void get_objc_property_list(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzB goto error; } } - property->name = rz_str_newf("%s::%s%s", klass->name, - "(property)", name); + property->name = rz_str_newf("%s::(property)%s", klass->name, name); RZ_FREE(name); } #if 0 @@ -836,7 +830,7 @@ static void get_protocol_list_t(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzBinC } name[name_len] = 0; } - class_name = rz_str_newf("%s::%s%s", klass->name, "(protocol)", name); + class_name = rz_str_newf("%s::(protocol)%s", klass->name, name); RZ_FREE(name); } @@ -1304,12 +1298,12 @@ RZ_API RzList /**/ *MACH0_(parse_classes)(RzBinFile *bf, objc_cach // RZ_LOG_ERROR("RzBinClass allocation error\n"); goto get_classes_error; } - if (!(klass->methods = rz_list_new())) { + if (!(klass->methods = rz_list_newf((RzListFree)rz_bin_symbol_free))) { // retain just for debug - // RZ_LOG_ERROR("RzList allocation error\n"); + // RZ_LOG_ERROR("RzList allocation error\n"); goto get_classes_error; } - if (!(klass->fields = rz_list_new())) { + if (!(klass->fields = rz_list_newf((RzListFree)rz_bin_class_field_free))) { // retain just for debug // RZ_LOG_ERROR("RzList allocation error\n"); goto get_classes_error; @@ -1396,11 +1390,11 @@ static RzList /**/ *MACH0_(parse_categories)(RzBinFile *bf, RzBuff if (!(klass = RZ_NEW0(RzBinClass))) { goto error; } - if (!(klass->methods = rz_list_new())) { + if (!(klass->methods = rz_list_newf((RzListFree)rz_bin_symbol_free))) { RZ_FREE(klass); goto error; } - if (!(klass->fields = rz_list_new())) { + if (!(klass->fields = rz_list_newf((RzListFree)rz_bin_class_field_free))) { RZ_FREE(klass); goto error; } diff --git a/librz/bin/i/private.h b/librz/bin/i/private.h index 57c714fdfd..184acf00f6 100644 --- a/librz/bin/i/private.h +++ b/librz/bin/i/private.h @@ -27,7 +27,6 @@ RZ_IPI RzBinObject *rz_bin_object_new(RzBinFile *binfile, RzBinPlugin *plugin, R RZ_IPI RzBinObject *rz_bin_object_get_cur(RzBin *bin); RZ_IPI RzBinObject *rz_bin_object_find_by_arch_bits(RzBinFile *binfile, const char *arch, int bits, const char *name); -RZ_IPI void rz_bin_class_free(RzBinClass *c); RZ_IPI RzBinSymbol *rz_bin_class_add_method(RzBinFile *binfile, const char *classname, const char *name, int nargs); RZ_IPI void rz_bin_class_add_field(RzBinFile *binfile, const char *classname, const char *name); diff --git a/librz/bin/p/bin_dex.c b/librz/bin/p/bin_dex.c index dff7c10db5..48b5d5579b 100644 --- a/librz/bin/p/bin_dex.c +++ b/librz/bin/p/bin_dex.c @@ -104,15 +104,6 @@ static RzList /**/ *symbols(RzBinFile *bf) { return rz_bin_dex_symbols(dex); } -static RzList /**/ *fields(RzBinFile *bf) { - RzBinDex *dex = rz_bin_file_get_dex(bf); - if (!dex) { - return NULL; - } - - return rz_bin_dex_fields(dex); -} - static RzList /**/ *libraries(RzBinFile *bf) { RzBinDex *dex = rz_bin_file_get_dex(bf); if (!dex) { @@ -257,7 +248,6 @@ RzBinPlugin rz_bin_plugin_dex = { .get_name = &get_name, .get_offset = &get_offset, .info = &info, - .fields = fields, .libs = libraries, .classes = classes, .demangle_type = demangle_type, diff --git a/librz/bin/p/bin_java.c b/librz/bin/p/bin_java.c index 3291ae398b..70bc522c66 100644 --- a/librz/bin/p/bin_java.c +++ b/librz/bin/p/bin_java.c @@ -1,4 +1,5 @@ -// SPDX-FileCopyrightText: 2021 deroad +// SPDX-FileCopyrightText: 2021-2023 RizinOrg +// SPDX-FileCopyrightText: 2021-2023 deroad // SPDX-License-Identifier: LGPL-3.0-only #include @@ -66,51 +67,13 @@ static Sdb *get_sdb(RzBinFile *bf) { return bf->sdb; } -static void free_rz_bin_class(void /*RzBinClass*/ *k) { - RzBinClass *bclass = (RzBinClass *)k; - if (bclass) { - rz_list_free(bclass->methods); - rz_list_free(bclass->fields); - free(bclass->name); - free(bclass->super); - free(bclass->visibility_str); - free(bclass); - } -} - static RzList /**/ *classes(RzBinFile *bf) { - RzBinClass *bclass = NULL; - RzList *classes = NULL; RzBinJavaClass *jclass = rz_bin_file_get_java_class(bf); if (!jclass) { return NULL; } - classes = rz_list_newf(free_rz_bin_class); - if (!classes) { - return NULL; - } - - bclass = RZ_NEW0(RzBinClass); - if (!bclass) { - rz_list_free(classes); - return NULL; - } - rz_list_append(classes, bclass); - - bclass->name = rz_bin_java_class_name(jclass); - bclass->super = rz_bin_java_class_super(jclass); - bclass->visibility = rz_bin_java_class_access_flags(jclass); - bclass->visibility_str = rz_bin_java_class_access_flags_readable(jclass, ACCESS_FLAG_MASK_ALL_NO_SUPER); - - bclass->methods = rz_bin_java_class_methods_as_symbols(jclass); - bclass->fields = rz_bin_java_class_fields_as_binfields(jclass); - if (!bclass->methods || !bclass->fields) { - rz_list_free(classes); - return NULL; - } - - return classes; + return rz_bin_java_class_as_classes(jclass); } static RzList /**/ *imports(RzBinFile *bf) { @@ -153,15 +116,6 @@ static RzList /**/ *symbols(RzBinFile *bf) { return list; } -static RzList /**/ *fields(RzBinFile *bf) { - RzBinJavaClass *jclass = rz_bin_file_get_java_class(bf); - if (!jclass) { - return NULL; - } - - return rz_bin_java_class_fields_as_binfields(jclass); -} - static RzList /**/ *libs(RzBinFile *bf) { RzBinJavaClass *jclass = rz_bin_file_get_java_class(bf); if (!jclass) { @@ -241,12 +195,11 @@ RzBinPlugin rz_bin_plugin_java = { .entries = &entrypoints, .maps = &rz_bin_maps_of_file_sections, .sections = sections, - .symbols = symbols, + .symbols = &symbols, .imports = &imports, .strings = &strings, .enrich_asm = &enrich_asm, .info = &info, - .fields = fields, .libs = libs, .classes = classes, .demangle_type = demangle_type, diff --git a/librz/core/cbin.c b/librz/core/cbin.c index 7b4f6bb80b..936b920ae3 100644 --- a/librz/core/cbin.c +++ b/librz/core/cbin.c @@ -3487,12 +3487,12 @@ static char *objc_name_toc(const char *objc_name) { static void classdump_c(RzCore *r, RzBinClass *c) { rz_cons_printf("typedef struct class_%s {\n", c->name); RzListIter *iter2; - RzBinField *f; + RzBinClassField *f; rz_list_foreach (c->fields, iter2, f) { if (f->type && f->name) { char *n = objc_name_toc(f->name); char *t = objc_type_toc(f->type); - rz_cons_printf(" %s %s; // %d\n", t, n, f->offset); + rz_cons_printf(" %s %s;\n", t, n); free(t); free(n); } @@ -3507,7 +3507,7 @@ static void classdump_objc(RzCore *r, RzBinClass *c) { rz_cons_printf("@interface %s\n{\n", c->name); } RzListIter *iter2, *iter3; - RzBinField *f; + RzBinClassField *f; RzBinSymbol *sym; rz_list_foreach (c->fields, iter2, f) { if (f->name && rz_regex_match("ivar", "e", f->name)) { @@ -3541,7 +3541,7 @@ static inline bool is_known_namespace(const char *string) { #define CXX_BIN_VISIBILITY_FLAGS (RZ_BIN_METH_PUBLIC | RZ_BIN_METH_PRIVATE | RZ_BIN_METH_PROTECTED) static void classdump_cpp(RzCore *r, RzBinClass *c) { RzListIter *iter; - RzBinField *f; + RzBinClassField *f; RzBinSymbol *sym; ut64 used = UT64_MAX; bool has_methods = false; @@ -3622,26 +3622,14 @@ static void classdump_cpp(RzCore *r, RzBinClass *c) { if (f->visibility & RZ_BIN_METH_CONST) { rz_cons_print("const "); } - rz_cons_printf("%s %s;\n", f->type, f->name); + const char *ftype = f->type ? f->type : "unknown_t"; + rz_cons_printf("%s %s;\n", ftype, f->name); } } rz_cons_printf("}\n"); } #undef CXX_BIN_VISIBILITY_FLAGS -static inline char *demangle_class(const char *classname) { - if (!classname || classname[0] != 'L') { - return strdup(classname ? classname : "?"); - } - char *demangled = strdup(classname + 1); - if (!demangled) { - return strdup(classname); - } - rz_str_replace_ch(demangled, '/', '.', 1); - demangled[strlen(demangled) - 1] = 0; - return demangled; -} - static inline char *demangle_type(const char *any) { if (!any) { return strdup("unknown"); @@ -3666,20 +3654,20 @@ static inline const char *resolve_java_visibility(const char *v) { } static void classdump_java(RzCore *r, RzBinClass *c) { - RzBinField *f; + RzBinClassField *f; RzListIter *iter2, *iter3; RzBinSymbol *sym; bool simplify = false; char *package = NULL, *classname = NULL; - char *tmp = (char *)rz_str_rchr(c->name, NULL, '/'); + char *tmp = (char *)rz_str_rchr(c->name, NULL, '.'); if (tmp) { - package = demangle_class(c->name); + package = strdup(c->name); classname = strdup(tmp + 1); classname[strlen(classname) - 1] = 0; simplify = true; } else { package = strdup("defpackage"); - classname = demangle_class(c->name); + classname = strdup(c->name); } rz_cons_printf("package %s;\n\n", package); @@ -3725,7 +3713,7 @@ static void classdump_java(RzCore *r, RzBinClass *c) { static void bin_class_print_rizin(RzCore *r, RzBinClass *c, ut64 at_min) { RzListIter *iter2; RzBinFile *bf = rz_bin_cur(r->bin); - RzBinField *f; + RzBinClassField *f; RzBinSymbol *sym; // class @@ -3820,7 +3808,7 @@ RZ_API bool rz_core_bin_class_fields_print(RZ_NONNULL RzCore *core, RZ_NONNULL R RzListIter *iter, *iter2; RzBinClass *c; - RzBinField *f; + RzBinClassField *f; int m = 0; const RzList *cs = rz_bin_object_get_classes(bf->o); @@ -3946,7 +3934,7 @@ RZ_API bool rz_core_bin_classes_print(RZ_NONNULL RzCore *core, RZ_NONNULL RzBinF RzListIter *iter, *iter2, *iter3; RzBinSymbol *sym; RzBinClass *c; - RzBinField *f; + RzBinClassField *f; const RzList *cs = rz_bin_object_get_classes(bf->o); if (!cs) { @@ -4711,7 +4699,7 @@ RZ_API RZ_OWN char *rz_core_bin_method_build_flag_name(RZ_NONNULL RzBinClass *cl * \brief Returns the flag name of a class field * **/ -RZ_API RZ_OWN char *rz_core_bin_field_build_flag_name(RZ_NONNULL RzBinClass *cls, RZ_NONNULL RzBinField *field) { +RZ_API RZ_OWN char *rz_core_bin_field_build_flag_name(RZ_NONNULL RzBinClass *cls, RZ_NONNULL RzBinClassField *field) { rz_return_val_if_fail(cls && field, NULL); if (!cls->name || !field->name) { return NULL; diff --git a/librz/core/tui/classes.c b/librz/core/tui/classes.c index 9a68c8daa5..1fe0ce0171 100644 --- a/librz/core/tui/classes.c +++ b/librz/core/tui/classes.c @@ -21,7 +21,7 @@ static void *show_class(RzCore *core, int mode, int *idx, RzBinClass *_c, const RzListIter *iter; RzBinClass *c, *cur = NULL; RzBinSymbol *m, *mur = NULL; - RzBinField *f, *fur = NULL; + RzBinClassField *f, *fur = NULL; int i = 0; int skip = *idx - 10; bool found = false; @@ -195,7 +195,7 @@ RZ_IPI int rz_core_visual_classes(RzCore *core) { int mode = 'c'; RzBinClass *cur = NULL; RzBinSymbol *mur = NULL; - RzBinField *fur = NULL; + RzBinClassField *fur = NULL; void *ptr; int oldcur = 0; char *grep = NULL; @@ -214,7 +214,7 @@ RZ_IPI int rz_core_visual_classes(RzCore *core) { ptr = show_class(core, mode, &index, cur, grep, list); switch (mode) { case 'f': - fur = (RzBinField *)ptr; + fur = (RzBinClassField *)ptr; break; case 'm': mur = (RzBinSymbol *)ptr; diff --git a/librz/core/tui/hud.c b/librz/core/tui/hud.c index 464029f823..469096dfa8 100644 --- a/librz/core/tui/hud.c +++ b/librz/core/tui/hud.c @@ -59,7 +59,7 @@ RZ_IPI bool rz_core_visual_hud(RzCore *core) { RZ_IPI bool rz_core_visual_hudclasses(RzCore *core) { RzListIter *iter, *iter2; RzBinClass *c; - RzBinField *f; + RzBinClassField *f; RzBinSymbol *m; ut64 addr; char *res; diff --git a/librz/include/rz_bin.h b/librz/include/rz_bin.h index 0e765d5a91..aaa070c253 100644 --- a/librz/include/rz_bin.h +++ b/librz/include/rz_bin.h @@ -653,7 +653,7 @@ typedef struct rz_bin_class_t { int index; ut64 addr; RzList /**/ *methods; - RzList /**/ *fields; + RzList /**/ *fields; // RzList *interfaces; // int visibility; } RzBinClass; @@ -765,18 +765,25 @@ typedef struct rz_bin_field_t { ut64 paddr; int size; int offset; - ut32 visibility; char *name; char *type; - char *visibility_str; char *comment; char *format; bool format_named; // whether format is the name of a format or a raw pf format string ut64 flags; } RzBinField; -RZ_API RzBinField *rz_bin_field_new(ut64 paddr, ut64 vaddr, int size, const char *name, const char *comment, const char *format, bool format_named); -RZ_API void rz_bin_field_free(RzBinField *field); +typedef struct rz_bin_class_field_t { + ut64 vaddr; + ut64 paddr; + char *name; + char *classname; + char *libname; + char *type; + ut32 visibility; + char *visibility_str; + ut64 flags; +} RzBinClassField; typedef struct rz_bin_mem_t { char *name; @@ -815,6 +822,12 @@ typedef struct rz_bin_bind_t { ut32 visibility; } RzBinBind; +RZ_API RzBinField *rz_bin_field_new(ut64 paddr, ut64 vaddr, int size, const char *name, const char *comment, const char *format, bool format_named); +RZ_API void rz_bin_field_free(RzBinField *field); +RZ_API RzBinClassField *rz_bin_class_field_new(ut64 vaddr, ut64 paddr, const char *name, const char *classname, const char *libname, const char *type); +RZ_API void rz_bin_class_field_free(RzBinClassField *field); +RZ_API void rz_bin_class_free(RzBinClass *k); + RZ_API void rz_bin_virtual_file_free(RzBinVirtualFile *vfile); RZ_API void rz_bin_map_free(RzBinMap *map); RZ_API bool rz_bin_map_is_data(RZ_NONNULL const RzBinMap *map); diff --git a/librz/include/rz_core.h b/librz/include/rz_core.h index 83ec0e5261..cff67b9f9c 100644 --- a/librz/include/rz_core.h +++ b/librz/include/rz_core.h @@ -976,7 +976,7 @@ RZ_API int rz_core_bin_update_arch_bits(RzCore *r); RZ_API RZ_OWN char *rz_core_bin_class_build_flag_name(RZ_NONNULL RzBinClass *cls); RZ_API RZ_OWN char *rz_core_bin_super_build_flag_name(RZ_NONNULL RzBinClass *cls); RZ_API RZ_OWN char *rz_core_bin_method_build_flag_name(RZ_NONNULL RzBinClass *cls, RZ_NONNULL RzBinSymbol *meth); -RZ_API RZ_OWN char *rz_core_bin_field_build_flag_name(RZ_NONNULL RzBinClass *cls, RZ_NONNULL RzBinField *field); +RZ_API RZ_OWN char *rz_core_bin_field_build_flag_name(RZ_NONNULL RzBinClass *cls, RZ_NONNULL RzBinClassField *field); RZ_API char *rz_core_bin_method_flags_str(ut64 flags, int mode); RZ_API RZ_OWN char *rz_core_bin_pdb_get_filename(RZ_NONNULL RzCore *core); RZ_API bool rz_core_bin_pdb_load(RZ_NONNULL RzCore *core, RZ_NONNULL const char *filename); diff --git a/librz/main/rz-diff.c b/librz/main/rz-diff.c index b193d3f9aa..07649d756e 100644 --- a/librz/main/rz-diff.c +++ b/librz/main/rz-diff.c @@ -760,10 +760,10 @@ static RzDiff *rz_diff_imports_new(DiffFile *dfile_a, DiffFile *dfile_b) { /**************************************** symbols ***************************************/ static ut32 symbol_hash_addr(const RzBinSymbol *elem) { - ut32 hash = rz_diff_hash_data((const ut8 *)elem->name, strlen(elem->name)); - hash ^= rz_diff_hash_data((const ut8 *)elem->dname, strlen(elem->dname)); - hash ^= rz_diff_hash_data((const ut8 *)elem->libname, strlen(elem->libname)); - hash ^= rz_diff_hash_data((const ut8 *)elem->classname, strlen(elem->classname)); + ut32 hash = rz_diff_hash_data((const ut8 *)elem->name, elem->name ? strlen(elem->name) : 0); + hash ^= rz_diff_hash_data((const ut8 *)elem->dname, elem->dname ? strlen(elem->dname) : 0); + hash ^= rz_diff_hash_data((const ut8 *)elem->libname, elem->libname ? strlen(elem->libname) : 0); + hash ^= rz_diff_hash_data((const ut8 *)elem->classname, elem->classname ? strlen(elem->classname) : 0); hash ^= (ut32)(elem->vaddr >> 32); hash ^= (ut32)elem->vaddr; hash ^= (ut32)(elem->paddr >> 32); diff --git a/test/db/analysis/dalvik b/test/db/analysis/dalvik index 91623018db..a31166397a 100644 --- a/test/db/analysis/dalvik +++ b/test/db/analysis/dalvik @@ -3,17 +3,17 @@ FILE=bins/dex/HelloWorld.dex CMDS=aa; afl EXPECT=<()V EOF @@ -35,29 +35,29 @@ RUN NAME=Dalvik HelloWorld func xref to super method FILE=bins/dex/org.radare.radare2installer.dex -CMDS=aaa; axt @ sym.Landroid_app_Activity_.onDestroy__V~invoke-super +CMDS=aaa; axt @ sym.android.app.Activity.void_onDestroy~invoke-super EXPECT=<onDestroy()V -method.public.Lorg_radare_radare2installer_LaunchActivity_.onDestroy__V 0x10001a256 [CALL] invoke-super {v1}, Landroid/app/Activity;->onDestroy()V -method.public.Lorg_radare_radare2installer_WebActivity_.onDestroy__V; void onDestroy() 0x10001e574 [CALL] invoke-super {v2}, Landroid/app/Activity;->onDestroy()V +method.public.org.radare.radare2installer.ConsoleActivity.void_onDestroy 0x100019e50 [CALL] invoke-super {v1}, Landroid/app/Activity;->onDestroy()V +method.public.org.radare.radare2installer.LaunchActivity.void_onDestroy 0x10001a256 [CALL] invoke-super {v1}, Landroid/app/Activity;->onDestroy()V +method.public.org.radare.radare2installer.WebActivity.void_onDestroy 0x10001e574 [CALL] invoke-super {v2}, Landroid/app/Activity;->onDestroy()V EOF RUN NAME=Dalvik resolve virtual methods called via invoke-virtual FILE=apk://bins/dex/org.radare.radare2installer.apk -CMDS=aaa ; axt @ sym.Lcom_ice_tar_TarEntry_.getUserName__Ljava_lang_String +CMDS=aaa ; axt @ sym.com.ice.tar.TarEntry.String_getUserName EXPECT=<getUserName()Ljava/lang/String; entry0 0x10000c9e6 [CALL] invoke-virtual {v1}, Lcom/ice/tar/TarEntry;->getUserName()Ljava/lang/String; -method.public.Lcom_ice_tar_TarEntry_.toString__Ljava_lang_String 0x10000f04a [CALL] invoke-virtual {v4}, Lcom/ice/tar/TarEntry;->getUserName()Ljava/lang/String; +method.public.com.ice.tar.TarEntry.String_toString 0x10000f04a [CALL] invoke-virtual {v4}, Lcom/ice/tar/TarEntry;->getUserName()Ljava/lang/String; EOF RUN NAME=Dalvik resolve imports called via invoke-virtual FILE=apk://bins/dex/org.radare.radare2installer.apk -CMDS=aaa ; axt @ sym.Ljava_net_URL_.openStream__Ljava_io_InputStream +CMDS=aaa ; axt @ sym.java.net.URL.java.io.InputStream_openStream EXPECT=<openStream()Ljava/io/InputStream; +method.public.javax.activation.URLDataSource.java.io.InputStream_getInputStream 0x100021180 [CALL] invoke-virtual {v0}, Ljava/net/URL;->openStream()Ljava/io/InputStream; EOF RUN @@ -116,83 +116,83 @@ aaa axg @ 0x800000021c EOF EXPECT=<()V 0x00000131 return ;-- entry2: ;-- section.class.methods.simple_for_loop_multi_return.attr.0.code: - ;-- sym.Lradare_test_cases_loops_.simple_for_loop_multi_return__B: -/ method.static.Lradare_test_cases_loops_.simple_for_loop_multi_return__B (); + ;-- sym.radare_test_cases.loops.byte_simple_for_loop_multi_return: +/ method.static.radare_test_cases.loops.byte_simple_for_loop_multi_return (); | 0x000001f1 iconst_0 | 0x000001f2 istore_2 | 0x000001f3 iconst_0 @@ -334,7 +335,7 @@ EXPECT=<() #2 = Class #34 // StringBuilder @@ -431,7 +432,7 @@ NAME=Output java class structure (json) FILE=bins/java/jdwpexeccmd.class CMDS=javacj EXPECT=<()V"},{"index":2,"tag_n":7,"tag_s":"Class","value":"#34","resolved":"Ljava/lang/StringBuilder;"},{"index":3,"tag_n":10,"tag_s":"Methodref","value":"#2:#33","resolved":"Ljava/lang/StringBuilder;.()V"},{"index":4,"tag_n":10,"tag_s":"Methodref","value":"#2:#35","resolved":"Ljava/lang/StringBuilder;.append(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":5,"tag_n":8,"tag_s":"String","value":"#36","resolved":"\" output:\\n\""},{"index":6,"tag_n":10,"tag_s":"Methodref","value":"#2:#37","resolved":"Ljava/lang/StringBuilder;.toString()Ljava/lang/String;"},{"index":7,"tag_n":10,"tag_s":"Methodref","value":"#38:#39","resolved":"Ljava/lang/Runtime;.getRuntime()Ljava/lang/Runtime;"},{"index":8,"tag_n":10,"tag_s":"Methodref","value":"#38:#40","resolved":"Ljava/lang/Runtime;.exec(Ljava/lang/String;)Ljava/lang/Process;"},{"index":9,"tag_n":7,"tag_s":"Class","value":"#41","resolved":"Ljava/io/BufferedReader;"},{"index":10,"tag_n":7,"tag_s":"Class","value":"#42","resolved":"Ljava/io/InputStreamReader;"},{"index":11,"tag_n":10,"tag_s":"Methodref","value":"#43:#44","resolved":"Ljava/lang/Process;.getInputStream()Ljava/io/InputStream;"},{"index":12,"tag_n":10,"tag_s":"Methodref","value":"#10:#45","resolved":"Ljava/io/InputStreamReader;.(Ljava/io/InputStream;)V"},{"index":13,"tag_n":10,"tag_s":"Methodref","value":"#9:#46","resolved":"Ljava/io/BufferedReader;.(Ljava/io/Reader;)V"},{"index":14,"tag_n":10,"tag_s":"Methodref","value":"#9:#47","resolved":"Ljava/io/BufferedReader;.readLine()Ljava/lang/String;"},{"index":15,"tag_n":10,"tag_s":"Methodref","value":"#48:#49","resolved":"Ljava/lang/String;.trim()Ljava/lang/String;"},{"index":16,"tag_n":8,"tag_s":"String","value":"#50","resolved":"\"\\n\""},{"index":17,"tag_n":7,"tag_s":"Class","value":"#51","resolved":"Ljava/lang/Exception;"},{"index":18,"tag_n":7,"tag_s":"Class","value":"#52","resolved":"LJDWPExecCmd;"},{"index":19,"tag_n":7,"tag_s":"Class","value":"#53","resolved":"Ljava/lang/Object;"},{"index":20,"tag_n":1,"tag_s":"Utf8","value":""},{"index":21,"tag_n":1,"tag_s":"Utf8","value":"()V"},{"index":22,"tag_n":1,"tag_s":"Utf8","value":"Code"},{"index":23,"tag_n":1,"tag_s":"Utf8","value":"LineNumberTable"},{"index":24,"tag_n":1,"tag_s":"Utf8","value":"run"},{"index":25,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/String;"},{"index":26,"tag_n":1,"tag_s":"Utf8","value":"StackMapTable"},{"index":27,"tag_n":7,"tag_s":"Class","value":"#54","resolved":"Ljava/lang/String;"},{"index":28,"tag_n":7,"tag_s":"Class","value":"#55","resolved":"Ljava/lang/Process;"},{"index":29,"tag_n":7,"tag_s":"Class","value":"#41","resolved":"Ljava/io/BufferedReader;"},{"index":30,"tag_n":7,"tag_s":"Class","value":"#51","resolved":"Ljava/lang/Exception;"},{"index":31,"tag_n":1,"tag_s":"Utf8","value":"SourceFile"},{"index":32,"tag_n":1,"tag_s":"Utf8","value":"JDWPExecCmd.java"},{"index":33,"tag_n":12,"tag_s":"NameAndType","value":"#20:#21","resolved":"()V"},{"index":34,"tag_n":1,"tag_s":"Utf8","value":"java/lang/StringBuilder"},{"index":35,"tag_n":12,"tag_s":"NameAndType","value":"#56:#57","resolved":"append(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":36,"tag_n":1,"tag_s":"Utf8","value":" output:\\n"},{"index":37,"tag_n":12,"tag_s":"NameAndType","value":"#58:#59","resolved":"toString()Ljava/lang/String;"},{"index":38,"tag_n":7,"tag_s":"Class","value":"#60","resolved":"Ljava/lang/Runtime;"},{"index":39,"tag_n":12,"tag_s":"NameAndType","value":"#61:#62","resolved":"getRuntime()Ljava/lang/Runtime;"},{"index":40,"tag_n":12,"tag_s":"NameAndType","value":"#63:#64","resolved":"exec(Ljava/lang/String;)Ljava/lang/Process;"},{"index":41,"tag_n":1,"tag_s":"Utf8","value":"java/io/BufferedReader"},{"index":42,"tag_n":1,"tag_s":"Utf8","value":"java/io/InputStreamReader"},{"index":43,"tag_n":7,"tag_s":"Class","value":"#55","resolved":"Ljava/lang/Process;"},{"index":44,"tag_n":12,"tag_s":"NameAndType","value":"#65:#66","resolved":"getInputStream()Ljava/io/InputStream;"},{"index":45,"tag_n":12,"tag_s":"NameAndType","value":"#20:#67","resolved":"(Ljava/io/InputStream;)V"},{"index":46,"tag_n":12,"tag_s":"NameAndType","value":"#20:#68","resolved":"(Ljava/io/Reader;)V"},{"index":47,"tag_n":12,"tag_s":"NameAndType","value":"#69:#59","resolved":"readLine()Ljava/lang/String;"},{"index":48,"tag_n":7,"tag_s":"Class","value":"#54","resolved":"Ljava/lang/String;"},{"index":49,"tag_n":12,"tag_s":"NameAndType","value":"#70:#59","resolved":"trim()Ljava/lang/String;"},{"index":50,"tag_n":1,"tag_s":"Utf8","value":"\\n"},{"index":51,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Exception"},{"index":52,"tag_n":1,"tag_s":"Utf8","value":"JDWPExecCmd"},{"index":53,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Object"},{"index":54,"tag_n":1,"tag_s":"Utf8","value":"java/lang/String"},{"index":55,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Process"},{"index":56,"tag_n":1,"tag_s":"Utf8","value":"append"},{"index":57,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":58,"tag_n":1,"tag_s":"Utf8","value":"toString"},{"index":59,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/lang/String;"},{"index":60,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Runtime"},{"index":61,"tag_n":1,"tag_s":"Utf8","value":"getRuntime"},{"index":62,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/lang/Runtime;"},{"index":63,"tag_n":1,"tag_s":"Utf8","value":"exec"},{"index":64,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/Process;"},{"index":65,"tag_n":1,"tag_s":"Utf8","value":"getInputStream"},{"index":66,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/io/InputStream;"},{"index":67,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/io/InputStream;)V"},{"index":68,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/io/Reader;)V"},{"index":69,"tag_n":1,"tag_s":"Utf8","value":"readLine"},{"index":70,"tag_n":1,"tag_s":"Utf8","value":"trim"}],"access_flags_n":33,"access_flags_s":"public super","class_n":18,"class_s":"LJDWPExecCmd;","super_n":19,"super_s":"java/lang/Object","interfaces_count":0,"interfaces":[],"methods_count":2,"methods":[{"offset":803,"access_flags_n":1,"access_flags_s":"public","name_n":20,"name_s":"","descriptor_n":21,"descriptor_s":"()V","attributes_count":1,"attributes":[{"offset":811,"size":29,"name_n":22,"name_s":"Code"}]},{"offset":846,"access_flags_n":9,"access_flags_s":"public static","name_n":24,"name_s":"run","descriptor_n":25,"descriptor_s":"(Ljava/lang/String;)Ljava/lang/String;","attributes_count":1,"attributes":[{"offset":854,"size":233,"name_n":22,"name_s":"Code"}]}],"fields_count":0,"fields":[],"attributes_count":1,"attributes":[{"offset":1095,"size":2,"name_n":31,"name_s":"SourceFile"}]} +{"version":{"minor":0,"major":51,"version":"Java SE 1.7"},"constant_pool_count":71,"constant_pool":[{"index":1,"tag_n":10,"tag_s":"Methodref","value":"#19:#33","resolved":"Ljava/lang/Object;.()V"},{"index":2,"tag_n":7,"tag_s":"Class","value":"#34","resolved":"Ljava/lang/StringBuilder;"},{"index":3,"tag_n":10,"tag_s":"Methodref","value":"#2:#33","resolved":"Ljava/lang/StringBuilder;.()V"},{"index":4,"tag_n":10,"tag_s":"Methodref","value":"#2:#35","resolved":"Ljava/lang/StringBuilder;.append(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":5,"tag_n":8,"tag_s":"String","value":"#36","resolved":"\" output:\\n\""},{"index":6,"tag_n":10,"tag_s":"Methodref","value":"#2:#37","resolved":"Ljava/lang/StringBuilder;.toString()Ljava/lang/String;"},{"index":7,"tag_n":10,"tag_s":"Methodref","value":"#38:#39","resolved":"Ljava/lang/Runtime;.getRuntime()Ljava/lang/Runtime;"},{"index":8,"tag_n":10,"tag_s":"Methodref","value":"#38:#40","resolved":"Ljava/lang/Runtime;.exec(Ljava/lang/String;)Ljava/lang/Process;"},{"index":9,"tag_n":7,"tag_s":"Class","value":"#41","resolved":"Ljava/io/BufferedReader;"},{"index":10,"tag_n":7,"tag_s":"Class","value":"#42","resolved":"Ljava/io/InputStreamReader;"},{"index":11,"tag_n":10,"tag_s":"Methodref","value":"#43:#44","resolved":"Ljava/lang/Process;.getInputStream()Ljava/io/InputStream;"},{"index":12,"tag_n":10,"tag_s":"Methodref","value":"#10:#45","resolved":"Ljava/io/InputStreamReader;.(Ljava/io/InputStream;)V"},{"index":13,"tag_n":10,"tag_s":"Methodref","value":"#9:#46","resolved":"Ljava/io/BufferedReader;.(Ljava/io/Reader;)V"},{"index":14,"tag_n":10,"tag_s":"Methodref","value":"#9:#47","resolved":"Ljava/io/BufferedReader;.readLine()Ljava/lang/String;"},{"index":15,"tag_n":10,"tag_s":"Methodref","value":"#48:#49","resolved":"Ljava/lang/String;.trim()Ljava/lang/String;"},{"index":16,"tag_n":8,"tag_s":"String","value":"#50","resolved":"\"\\n\""},{"index":17,"tag_n":7,"tag_s":"Class","value":"#51","resolved":"Ljava/lang/Exception;"},{"index":18,"tag_n":7,"tag_s":"Class","value":"#52","resolved":"LJDWPExecCmd;"},{"index":19,"tag_n":7,"tag_s":"Class","value":"#53","resolved":"Ljava/lang/Object;"},{"index":20,"tag_n":1,"tag_s":"Utf8","value":""},{"index":21,"tag_n":1,"tag_s":"Utf8","value":"()V"},{"index":22,"tag_n":1,"tag_s":"Utf8","value":"Code"},{"index":23,"tag_n":1,"tag_s":"Utf8","value":"LineNumberTable"},{"index":24,"tag_n":1,"tag_s":"Utf8","value":"run"},{"index":25,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/String;"},{"index":26,"tag_n":1,"tag_s":"Utf8","value":"StackMapTable"},{"index":27,"tag_n":7,"tag_s":"Class","value":"#54","resolved":"Ljava/lang/String;"},{"index":28,"tag_n":7,"tag_s":"Class","value":"#55","resolved":"Ljava/lang/Process;"},{"index":29,"tag_n":7,"tag_s":"Class","value":"#41","resolved":"Ljava/io/BufferedReader;"},{"index":30,"tag_n":7,"tag_s":"Class","value":"#51","resolved":"Ljava/lang/Exception;"},{"index":31,"tag_n":1,"tag_s":"Utf8","value":"SourceFile"},{"index":32,"tag_n":1,"tag_s":"Utf8","value":"JDWPExecCmd.java"},{"index":33,"tag_n":12,"tag_s":"NameAndType","value":"#20:#21","resolved":"()V"},{"index":34,"tag_n":1,"tag_s":"Utf8","value":"java/lang/StringBuilder"},{"index":35,"tag_n":12,"tag_s":"NameAndType","value":"#56:#57","resolved":"append(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":36,"tag_n":1,"tag_s":"Utf8","value":" output:\\n"},{"index":37,"tag_n":12,"tag_s":"NameAndType","value":"#58:#59","resolved":"toString()Ljava/lang/String;"},{"index":38,"tag_n":7,"tag_s":"Class","value":"#60","resolved":"Ljava/lang/Runtime;"},{"index":39,"tag_n":12,"tag_s":"NameAndType","value":"#61:#62","resolved":"getRuntime()Ljava/lang/Runtime;"},{"index":40,"tag_n":12,"tag_s":"NameAndType","value":"#63:#64","resolved":"exec(Ljava/lang/String;)Ljava/lang/Process;"},{"index":41,"tag_n":1,"tag_s":"Utf8","value":"java/io/BufferedReader"},{"index":42,"tag_n":1,"tag_s":"Utf8","value":"java/io/InputStreamReader"},{"index":43,"tag_n":7,"tag_s":"Class","value":"#55","resolved":"Ljava/lang/Process;"},{"index":44,"tag_n":12,"tag_s":"NameAndType","value":"#65:#66","resolved":"getInputStream()Ljava/io/InputStream;"},{"index":45,"tag_n":12,"tag_s":"NameAndType","value":"#20:#67","resolved":"(Ljava/io/InputStream;)V"},{"index":46,"tag_n":12,"tag_s":"NameAndType","value":"#20:#68","resolved":"(Ljava/io/Reader;)V"},{"index":47,"tag_n":12,"tag_s":"NameAndType","value":"#69:#59","resolved":"readLine()Ljava/lang/String;"},{"index":48,"tag_n":7,"tag_s":"Class","value":"#54","resolved":"Ljava/lang/String;"},{"index":49,"tag_n":12,"tag_s":"NameAndType","value":"#70:#59","resolved":"trim()Ljava/lang/String;"},{"index":50,"tag_n":1,"tag_s":"Utf8","value":"\\n"},{"index":51,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Exception"},{"index":52,"tag_n":1,"tag_s":"Utf8","value":"JDWPExecCmd"},{"index":53,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Object"},{"index":54,"tag_n":1,"tag_s":"Utf8","value":"java/lang/String"},{"index":55,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Process"},{"index":56,"tag_n":1,"tag_s":"Utf8","value":"append"},{"index":57,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":58,"tag_n":1,"tag_s":"Utf8","value":"toString"},{"index":59,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/lang/String;"},{"index":60,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Runtime"},{"index":61,"tag_n":1,"tag_s":"Utf8","value":"getRuntime"},{"index":62,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/lang/Runtime;"},{"index":63,"tag_n":1,"tag_s":"Utf8","value":"exec"},{"index":64,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/Process;"},{"index":65,"tag_n":1,"tag_s":"Utf8","value":"getInputStream"},{"index":66,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/io/InputStream;"},{"index":67,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/io/InputStream;)V"},{"index":68,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/io/Reader;)V"},{"index":69,"tag_n":1,"tag_s":"Utf8","value":"readLine"},{"index":70,"tag_n":1,"tag_s":"Utf8","value":"trim"}],"access_flags_n":33,"access_flags_s":"public super","class_n":18,"class_s":"LJDWPExecCmd;","super_n":19,"super_s":"Ljava/lang/Object;","interfaces_count":0,"interfaces":[],"methods_count":2,"methods":[{"offset":803,"access_flags_n":1,"access_flags_s":"public","name_n":20,"name_s":"","descriptor_n":21,"descriptor_s":"()V","attributes_count":1,"attributes":[{"offset":811,"size":29,"name_n":22,"name_s":"Code"}]},{"offset":846,"access_flags_n":9,"access_flags_s":"public static","name_n":24,"name_s":"run","descriptor_n":25,"descriptor_s":"(Ljava/lang/String;)Ljava/lang/String;","attributes_count":1,"attributes":[{"offset":854,"size":233,"name_n":22,"name_s":"Code"}]}],"fields_count":0,"fields":[],"attributes_count":1,"attributes":[{"offset":1095,"size":2,"name_n":31,"name_s":"SourceFile"}]} EOF RUN @@ -443,7 +444,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -620,7 +621,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -727,7 +728,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -843,7 +844,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -959,7 +960,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -1075,7 +1076,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -1191,7 +1192,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -1307,7 +1308,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -1423,7 +1424,7 @@ EXPECT=<() #2 = Class #4 // Object @@ -1538,8 +1539,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x00000387 return @@ -1553,8 +1554,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x00000387 return @@ -1568,8 +1569,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x000004a8 return @@ -1583,8 +1584,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x000004a8 return @@ -1598,8 +1599,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x000004a8 return @@ -1613,8 +1614,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x000004a8 return @@ -1628,8 +1629,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x000004a8 return @@ -1643,8 +1644,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x000004a8 return @@ -1658,8 +1659,8 @@ CMDS=af ; pdf EXPECT=<()V \ 0x000004a8 return diff --git a/test/db/cmd/cmd_i b/test/db/cmd/cmd_i index d7e2d4aa52..a4a8af82f5 100644 --- a/test/db/cmd/cmd_i +++ b/test/db/cmd/cmd_i @@ -411,8 +411,8 @@ RELROCS false NX false ;-- entry1: ;-- section.class.methods.TestMultipleVariable.attr.0.code: - ;-- sym.LTestVariableSwitchUp_.TestMultipleVariable__V: -/ method.static.LTestVariableSwitchUp_.TestMultipleVariable__V (); + ;-- sym.TestVariableSwitchUp.void_TestMultipleVariable: +/ method.static.TestVariableSwitchUp.void_TestMultipleVariable (); | 0x000002fd 1064 bipush 100 | 0x000002ff b8000f invokestatic Ljava/lang/Integer;.valueOf(I)Ljava/lang/Integer; | 0x00000302 4b astore_0 @@ -5320,21 +5320,21 @@ NAME=ic (file Java) FILE=bins/java/Hello.class CMDS=<(Ljava/lang/String;)V -0x00000263 1 LHello; p say()V -0x000002aa 2 LHello; sp main([Ljava/lang/String;)V +address min max name super +---------------------------------------------- +0x00000000 0x0000022b 0x000002d3 Hello Object +address index class flags name type +----------------------------------------- +0x0000020b 0 Hello P who String +address index class flags name +------------------------------------------------- +0x0000022b 0 Hello p void (String) +0x00000263 1 Hello p void say() +0x000002aa 2 Hello sp void main(String[]) EOF RUN @@ -5346,9 +5346,9 @@ icfj icmj EOF EXPECT=<","flags":["public"],"addr":555},{"name":"LHello;.say","flags":["public"],"addr":611},{"name":"LHello;.main","flags":["static","public"],"addr":682}],"fields":[{"name":"who","type":"Ljava/lang/String;","flags":["private"],"addr":523}]}] -[{"type":"Ljava/lang/String;","name":"who","class":"LHello;","flags":["private"],"addr":523}] -[{"name":"(Ljava/lang/String;)V","class":"LHello;","flags":["public"],"addr":555},{"name":"say()V","class":"LHello;","flags":["public"],"addr":611},{"name":"main([Ljava/lang/String;)V","class":"LHello;","flags":["static","public"],"addr":682}] +[{"classname":"Hello","addr":0,"index":0,"visibility":"public","super":"Object","methods":[{"name":"Hello.","flags":["public"],"addr":555},{"name":"Hello.say","flags":["public"],"addr":611},{"name":"Hello.main","flags":["static","public"],"addr":682}],"fields":[{"name":"who","type":"String","flags":["private"],"addr":523}]}] +[{"type":"String","name":"who","class":"Hello","flags":["private"],"addr":523}] +[{"name":"void (String)","class":"Hello","flags":["public"],"addr":555},{"name":"void say()","class":"Hello","flags":["public"],"addr":611},{"name":"void main(String[])","class":"Hello","flags":["static","public"],"addr":682}] EOF RUN @@ -5356,7 +5356,7 @@ NAME=icq (file Java) FILE=bins/java/Hello.class CMDS=icq EXPECT=<(Ljava/lang/String;)V -0x1000001c0 1 LHello; sp main([Ljava/lang/String;)V -0x1000001e8 2 LHello; p say()V +address min max name super +------------------------------------------------ +0x00000174 0x1000001a4 0x10000021e Hello Object +address index class flags name type +------------------------------------------ +0x100000336 0 Hello P who String +address index class flags name +-------------------------------------------------- +0x1000001a4 0 Hello pC void (String) +0x1000001c0 1 Hello sp void main(String[]) +0x1000001e8 2 Hello p void say() EOF RUN NAME=DEX Hello.dex single class (icf & icm LHello) FILE=bins/dex/Hello.dex CMDS=<(Ljava/lang/String;)V -0x1000001c0 1 LHello; sp main([Ljava/lang/String;)V -0x1000001e8 2 LHello; p say()V +address index class flags name type +------------------------------------------ +0x100000336 0 Hello P who String +address index class flags name +-------------------------------------------------- +0x1000001a4 0 Hello pC void (String) +0x1000001c0 1 Hello sp void main(String[]) +0x1000001e8 2 Hello p void say() EOF RUN @@ -118,7 +118,7 @@ NAME=DEX Hello.dex classes quiet (icq command) FILE=bins/dex/Hello.dex CMDS=icq EXPECT=<() 0x100000318 68 World void foo(int) 0x00000000 0 java.lang.System imp.out -0x8000000000 2 java.io.PrintStream imp.println(Ljava/lang/String;)V -0x8000000002 2 java.lang.Integer imp.(I)V -0x8000000004 2 java.lang.Integer imp.toString()Ljava/lang/String; -0x8000000006 2 java.lang.Object imp.()V -0x8000000008 2 java.lang.StringBuilder imp.()V -0x800000000a 2 java.lang.StringBuilder imp.append(Ljava/lang/String;)Ljava/lang/StringBuilder; -0x800000000c 2 java.lang.StringBuilder imp.toString()Ljava/lang/String; +0x8000000000 2 java.io.PrintStream imp.void println(String) +0x8000000002 2 java.lang.Integer imp.void (int) +0x8000000004 2 java.lang.Integer imp.String toString() +0x8000000006 2 java.lang.Object imp.void () +0x8000000008 2 java.lang.StringBuilder imp.void () +0x800000000a 2 java.lang.StringBuilder imp.StringBuilder append(String) +0x800000000c 2 java.lang.StringBuilder imp.String toString() EOF RUN @@ -171,22 +171,22 @@ FILE=bins/dex/HelloWorld.dex CMDS=fl EXPECT=<(int) -3 ---------- WEAK FUNC java.lang String Integer.toString() -4 ---------- WEAK FUNC java.lang void Object.() -5 ---------- WEAK FUNC java.lang void StringBuilder.() -6 ---------- WEAK FUNC java.lang StringBuilder StringBuilder.append(String) -7 ---------- WEAK FUNC java.lang String StringBuilder.toString() +nth vaddr bind type lib name +--------------------------------------------------------------------------------------------- +0 0x00000000 WEAK FIELD java.lang.System System.out +1 ---------- WEAK FUNC java.io.PrintStream void java.io.PrintStream.println(String) +2 ---------- WEAK FUNC java.lang.Integer void Integer.(int) +3 ---------- WEAK FUNC java.lang.Integer String Integer.toString() +4 ---------- WEAK FUNC java.lang.Object void Object.() +5 ---------- WEAK FUNC java.lang.StringBuilder void StringBuilder.() +6 ---------- WEAK FUNC java.lang.StringBuilder StringBuilder StringBuilder.append(String) +7 ---------- WEAK FUNC java.lang.StringBuilder String StringBuilder.toString() EOF RUN @@ -478,8 +478,8 @@ NAME=DEX radare2installer.dex classes (is getProper) FILE=bins/dex/org.radare.radare2installer.dex CMDS=ii~getProper EXPECT=<(Landroid/content/Context;)V -0x100011440 1 Lcom/stericson/RootTools/Installer; r installBinary(ILjava/lang/String;Ljava/lang/String;)Z -0x100011814 2 Lcom/stericson/RootTools/Installer; r isBinaryInstalled(Ljava/lang/String;)Z +address index class flags name type +-------------------------------------------------------------------------------------------------- +0x10000a4b2 0 com.stericson.RootTools.Installer sPf BOGUS_FILE_NAME String +0x10000a4b5 1 com.stericson.RootTools.Installer sPf LOG_TAG String +0x10000a4b7 2 com.stericson.RootTools.Installer P context android.content.Context +0x10000a4ba 3 com.stericson.RootTools.Installer P filesPath String +address index class flags name +----------------------------------------------------------------------------------------------------- +0x100011410 0 com.stericson.RootTools.Installer pC void (android.content.Context) +0x100011440 1 com.stericson.RootTools.Installer r boolean installBinary(int, String, String) +0x100011814 2 com.stericson.RootTools.Installer r boolean isBinaryInstalled(String) EOF RUN diff --git a/test/db/formats/dyldcache b/test/db/formats/dyldcache index 57329649d9..15f5a51bf2 100644 --- a/test/db/formats/dyldcache +++ b/test/db/formats/dyldcache @@ -226,7 +226,7 @@ address min max name super 0x00000000 0x180014f94 0x180014f98 std address index class flags name type ------------------------------------------------------------------------ -0x00000000 0 Test isa struct objc_class * +---------- 0 Test isa struct objc_class * 0x182068038 1 Test Test::(ivar)someField i address index class flags name ----------------------------------------------------------- @@ -319,7 +319,7 @@ address min max name super 0x00000000 0x180014f94 0x180014f98 std address index class flags name type ------------------------------------------------------------------------ -0x00000000 0 Test isa struct objc_class * +---------- 0 Test isa struct objc_class * 0x18206c038 1 Test Test::(ivar)someField i address index class flags name ----------------------------------------------------------- @@ -331,12 +331,12 @@ address index class flags name 0x180018a38 5 Test c someStaticMethod address index class flags name type ------------------------------------------------------------------------------------------ -0x00000000 0 NSObject isa struct objc_class * +---------- 0 NSObject isa struct objc_class * 0x18206d1c4 1 NSObject NSObject::(ivar)isa # -0x00000000 2 NSObject NSObject::(property)hash -0x00000000 3 NSObject NSObject::(property)superclass -0x00000000 4 NSObject NSObject::(property)description -0x00000000 5 NSObject NSObject::(property)debugDescription +---------- 2 NSObject NSObject::(property)hash +---------- 3 NSObject NSObject::(property)superclass +---------- 4 NSObject NSObject::(property)description +---------- 5 NSObject NSObject::(property)debugDescription address index class flags name ------------------------------------------------------------------------ 0x18004144c 0 NSObject init diff --git a/test/db/formats/java b/test/db/formats/java index 083c57fe86..4f52cfc23e 100644 --- a/test/db/formats/java +++ b/test/db/formats/java @@ -120,15 +120,15 @@ NAME=Java list symbols DemoTest.class FILE=bins/java/DemoTest.class CMDS=is EXPECT=<() 2 0x000001e8 0x000001e8 LOCAL FUNC 27 DemoTest String res() 3 0x00000211 0x00000211 LOCAL FUNC 37 DemoTest void main(String[]) -1 0x0000000a 0x0000000a IMPORT METH 0 java.lang.Object void () -3 0x00000012 0x00000012 IMPORT FIELD 0 java.lang.System imp.out -5 0x0000001a 0x0000001a IMPORT METH 0 java.io.PrintStream void println(String) +1 0x0000000a 0x0000000a IMPORT METH 0 java.lang.Object imp.void () +3 0x00000012 0x00000012 IMPORT FIELD 0 java.lang.System imp.System.out +5 0x0000001a 0x0000001a IMPORT METH 0 java.io.PrintStream imp.void println(String) EOF RUN @@ -137,8 +137,8 @@ NAME=Java list symbols ExCaseTableSwitch.class FILE=bins/java/ExCaseTableSwitch.class CMDS=is EXPECT=<() 1 0x000004a1 0x000004a1 LOCAL FUNC 304 CaseTableSwitch String a(int) 2 0x000005df 0x000005df LOCAL FUNC 54 CaseTableSwitch int a(String) @@ -147,15 +147,15 @@ nth paddr vaddr bind type size lib name 5 0x00000816 0x00000816 LOCAL FUNC 454 CaseTableSwitch void straight_line_switch() 6 0x000009ea 0x000009ea LOCAL FUNC 446 CaseTableSwitch void straight_line_switch_() 7 0x00000bb6 0x00000bb6 LOCAL FUNC 446 CaseTableSwitch void main(String[]) -8 0x0000004b 0x0000004b IMPORT METH 0 java.lang.Object void () -16 0x000000b3 0x000000b3 IMPORT FIELD 0 java.lang.System imp.out -26 0x0000011d 0x0000011d IMPORT METH 0 java.lang.StringBuilder void (String) -29 0x0000013f 0x0000013f IMPORT METH 0 java.lang.StringBuilder StringBuilder append(int) -33 0x00000171 0x00000171 IMPORT METH 0 java.lang.StringBuilder String toString() -37 0x0000019d 0x0000019d IMPORT METH 0 java.io.PrintStream void println(String) -46 0x000001fd 0x000001fd IMPORT METH 0 java.lang.String void () -55 0x00000267 0x00000267 IMPORT METH 0 java.lang.Integer Integer valueOf(int) -61 0x000002ab 0x000002ab IMPORT METH 0 TestVariableSwitchUp void TestMultipleVariable() +8 0x0000004b 0x0000004b IMPORT METH 0 java.lang.Object imp.void () +16 0x000000b3 0x000000b3 IMPORT FIELD 0 java.lang.System imp.System.out +26 0x0000011d 0x0000011d IMPORT METH 0 java.lang.StringBuilder imp.void (String) +29 0x0000013f 0x0000013f IMPORT METH 0 java.lang.StringBuilder imp.StringBuilder append(int) +33 0x00000171 0x00000171 IMPORT METH 0 java.lang.StringBuilder imp.String toString() +37 0x0000019d 0x0000019d IMPORT METH 0 java.io.PrintStream imp.void println(String) +46 0x000001fd 0x000001fd IMPORT METH 0 java.lang.String imp.void () +55 0x00000267 0x00000267 IMPORT METH 0 java.lang.Integer imp.Integer valueOf(int) +61 0x000002ab 0x000002ab IMPORT METH 0 TestVariableSwitchUp imp.void TestMultipleVariable() EOF RUN @@ -174,21 +174,21 @@ NAME=Java list symbols Hello.class FILE=bins/java/Hello.class CMDS=is EXPECT=<(String) 1 0x00000263 0x00000263 LOCAL FUNC 57 Hello void say() 2 0x000002aa 0x000002aa LOCAL FUNC 41 Hello void main(String[]) -0 0x0000020b 0x0000020b LOCAL OBJ 0 Hello.who -1 0x0000000a 0x0000000a IMPORT METH 0 java.lang.Object void () -2 0x0000000f 0x0000000f IMPORT FIELD 0 Hello imp.who -3 0x00000014 0x00000014 IMPORT FIELD 0 java.lang.System imp.out -5 0x0000001c 0x0000001c IMPORT METH 0 java.lang.StringBuilder void () -7 0x00000024 0x00000024 IMPORT METH 0 java.lang.StringBuilder StringBuilder append(String) -8 0x00000029 0x00000029 IMPORT METH 0 java.lang.StringBuilder String toString() -9 0x0000002e 0x0000002e IMPORT METH 0 java.io.PrintStream void println(String) -12 0x00000039 0x00000039 IMPORT METH 0 Hello void (String) -13 0x0000003e 0x0000003e IMPORT METH 0 Hello void say() +0 0x0000020b 0x0000020b LOCAL OBJ 0 Hello Hello.who +1 0x0000000a 0x0000000a IMPORT METH 0 java.lang.Object imp.void () +2 0x0000000f 0x0000000f IMPORT FIELD 0 Hello imp.Hello.who +3 0x00000014 0x00000014 IMPORT FIELD 0 java.lang.System imp.System.out +5 0x0000001c 0x0000001c IMPORT METH 0 java.lang.StringBuilder imp.void () +7 0x00000024 0x00000024 IMPORT METH 0 java.lang.StringBuilder imp.StringBuilder append(String) +8 0x00000029 0x00000029 IMPORT METH 0 java.lang.StringBuilder imp.String toString() +9 0x0000002e 0x0000002e IMPORT METH 0 java.io.PrintStream imp.void println(String) +12 0x00000039 0x00000039 IMPORT METH 0 Hello imp.void (String) +13 0x0000003e 0x0000003e IMPORT METH 0 Hello imp.void say() EOF RUN @@ -197,10 +197,10 @@ NAME=Java list symbols HiKt.class FILE=bins/java/HiKt.class CMDS=is EXPECT=<() 1 0x00000364 0x00000364 LOCAL FUNC 233 JDWPExecCmd String run(String) -1 0x0000000a 0x0000000a IMPORT METH 0 java.lang.Object void () -3 0x00000012 0x00000012 IMPORT METH 0 java.lang.StringBuilder void () -4 0x00000017 0x00000017 IMPORT METH 0 java.lang.StringBuilder StringBuilder append(String) -6 0x0000001f 0x0000001f IMPORT METH 0 java.lang.StringBuilder String toString() -7 0x00000024 0x00000024 IMPORT METH 0 java.lang.Runtime Runtime getRuntime() -8 0x00000029 0x00000029 IMPORT METH 0 java.lang.Runtime Process exec(String) -11 0x00000034 0x00000034 IMPORT METH 0 java.lang.Process java.io.InputStream getInputStream() -12 0x00000039 0x00000039 IMPORT METH 0 java.io.InputStreamReader void (java.io.InputStream) -13 0x0000003e 0x0000003e IMPORT METH 0 java.io.BufferedReader void (java.io.Reader) -14 0x00000043 0x00000043 IMPORT METH 0 java.io.BufferedReader String readLine() -15 0x00000048 0x00000048 IMPORT METH 0 java.lang.String String trim() +1 0x0000000a 0x0000000a IMPORT METH 0 java.lang.Object imp.void () +3 0x00000012 0x00000012 IMPORT METH 0 java.lang.StringBuilder imp.void () +4 0x00000017 0x00000017 IMPORT METH 0 java.lang.StringBuilder imp.StringBuilder append(String) +6 0x0000001f 0x0000001f IMPORT METH 0 java.lang.StringBuilder imp.String toString() +7 0x00000024 0x00000024 IMPORT METH 0 java.lang.Runtime imp.Runtime getRuntime() +8 0x00000029 0x00000029 IMPORT METH 0 java.lang.Runtime imp.Process exec(String) +11 0x00000034 0x00000034 IMPORT METH 0 java.lang.Process imp.java.io.InputStream getInputStream() +12 0x00000039 0x00000039 IMPORT METH 0 java.io.InputStreamReader imp.void (java.io.InputStream) +13 0x0000003e 0x0000003e IMPORT METH 0 java.io.BufferedReader imp.void (java.io.Reader) +14 0x00000043 0x00000043 IMPORT METH 0 java.io.BufferedReader imp.String readLine() +15 0x00000048 0x00000048 IMPORT METH 0 java.lang.String imp.String trim() EOF RUN @@ -245,8 +245,8 @@ NAME=Java list symbols MainActivity.class FILE=bins/java/MainActivity.class CMDS=is EXPECT=<() 1 0x00001d06 0x00001d06 LOCAL FUNC 494 org.radare2.installer.MainActivity void onCreate(android.os.Bundle) 2 0x00001f02 0x00001f02 LOCAL FUNC 74 org.radare2.installer.MainActivity boolean onCreateOptionsMenu(android.view.Menu) @@ -268,100 +268,100 @@ nth paddr vaddr bind type size lib 18 0x0000291f 0x0000291f LOCAL FUNC 59 org.radare2.installer.MainActivity Thread access$602(org.radare2.installer.MainActivity, Thread) 19 0x00002968 0x00002968 LOCAL FUNC 47 org.radare2.installer.MainActivity android.os.Handler access$700(org.radare2.installer.MainActivity) 20 0x000029a5 0x000029a5 LOCAL FUNC 69 org.radare2.installer.MainActivity boolean access$800(org.radare2.installer.MainActivity, String, String) -0 0x00001c1f 0x00001c1f LOCAL OBJ 0 org.radare2.installer.MainActivity.outputView -1 0x00001c27 0x00001c27 LOCAL OBJ 0 org.radare2.installer.MainActivity.handler -2 0x00001c2f 0x00001c2f LOCAL OBJ 0 org.radare2.installer.MainActivity.remoteRunButton -3 0x00001c37 0x00001c37 LOCAL OBJ 0 org.radare2.installer.MainActivity.localRunButton -4 0x00001c3f 0x00001c3f LOCAL OBJ 0 org.radare2.installer.MainActivity.context -5 0x00001c47 0x00001c47 LOCAL OBJ 0 org.radare2.installer.MainActivity.mUtils -6 0x00001c4f 0x00001c4f LOCAL OBJ 0 org.radare2.installer.MainActivity.http_url_default -7 0x00001c57 0x00001c57 LOCAL OBJ 0 org.radare2.installer.MainActivity.onLocalRunButtonClick -8 0x00001c5f 0x00001c5f LOCAL OBJ 0 org.radare2.installer.MainActivity.thread -9 0x00001c67 0x00001c67 LOCAL OBJ 0 org.radare2.installer.MainActivity.onRemoteRunButtonClick -1 0x0000000a 0x0000000a IMPORT METH 0 org.radare2.installer.MainActivity boolean download(String, String) -2 0x0000000f 0x0000000f IMPORT FIELD 0 org.radare2.installer.MainActivity imp.handler -3 0x00000014 0x00000014 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.thread -4 0x00000019 0x00000019 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.outputView -5 0x0000001e 0x0000001e IMPORT FIELD 0 org.radare2.installer.MainActivity imp.remoteRunButton -6 0x00000023 0x00000023 IMPORT METH 0 org.radare2.installer.MainActivity boolean checkForRadare() -7 0x00000028 0x00000028 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.http_url_default -8 0x0000002d 0x0000002d IMPORT METH 0 org.radare2.installer.MainActivity void output(String) -9 0x00000032 0x00000032 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.mUtils -10 0x00000037 0x00000037 IMPORT METH 0 android.app.Activity void () -12 0x0000003f 0x0000003f IMPORT METH 0 android.os.Handler void () -15 0x0000004a 0x0000004a IMPORT METH 0 org.radare2.installer.MainActivity$2 void (org.radare2.installer.MainActivity) -16 0x0000004f 0x0000004f IMPORT FIELD 0 org.radare2.installer.MainActivity imp.onLocalRunButtonClick -18 0x00000057 0x00000057 IMPORT METH 0 org.radare2.installer.MainActivity$3 void (org.radare2.installer.MainActivity) -19 0x0000005c 0x0000005c IMPORT FIELD 0 org.radare2.installer.MainActivity imp.onRemoteRunButtonClick -20 0x00000061 0x00000061 IMPORT METH 0 android.app.Activity void onCreate(android.os.Bundle) -23 0x0000006e 0x0000006e IMPORT METH 0 org.radare2.installer.MainActivity void setContentView(int) -25 0x00000076 0x00000076 IMPORT METH 0 org.radare2.installer.MainActivity android.content.Context getApplicationContext() -26 0x0000007b 0x0000007b IMPORT METH 0 org.radare2.installer.Utils void (android.content.Context) -29 0x00000088 0x00000088 IMPORT METH 0 org.radare2.installer.MainActivity android.view.View findViewById(int) -34 0x0000009d 0x0000009d IMPORT METH 0 org.radare2.installer.Utils String GetPref(String) -36 0x000000a5 0x000000a5 IMPORT METH 0 java.lang.String boolean equals(Object) -37 0x000000aa 0x000000aa IMPORT METH 0 android.widget.CheckBox void setChecked(boolean) -45 0x000000c8 0x000000c8 IMPORT METH 0 android.widget.Button void setOnClickListener(android.view.View$OnClickListener) -47 0x000000d2 0x000000d2 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.localRunButton -49 0x000000da 0x000000da IMPORT METH 0 org.radare2.installer.Utils boolean isInternetAvailable() -50 0x000000df 0x000000df IMPORT METH 0 android.preference.PreferenceManager android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context) -53 0x000000ea 0x000000ea IMPORT METH 0 org.radare2.installer.MainActivity$1 void (org.radare2.installer.MainActivity, android.content.SharedPreferences) -54 0x000000ef 0x000000ef IMPORT METH 0 java.lang.Thread void (java.lang.Runnable) -55 0x000000f4 0x000000f4 IMPORT METH 0 java.lang.Thread void start() -58 0x000000ff 0x000000ff IMPORT IMETH 0 android.view.Menu android.view.MenuItem add(int, int, int, java.lang.CharSequence) -59 0x00000104 0x00000104 IMPORT METH 0 android.app.Activity boolean onCreateOptionsMenu(android.view.Menu) -60 0x00000109 0x00000109 IMPORT IMETH 0 android.view.MenuItem int getItemId() -63 0x00000114 0x00000114 IMPORT METH 0 android.content.Intent void (android.content.Context, Class) -65 0x0000011e 0x0000011e IMPORT METH 0 android.content.Intent android.content.Intent setFlags(int) -66 0x00000123 0x00000123 IMPORT METH 0 org.radare2.installer.MainActivity void startActivity(android.content.Intent) -69 0x0000012e 0x0000012e IMPORT METH 0 java.io.File void (String) -70 0x00000133 0x00000133 IMPORT METH 0 java.io.File boolean exists() -72 0x0000013b 0x0000013b IMPORT METH 0 org.radare2.installer.MainActivity$4 void (org.radare2.installer.MainActivity, String) -73 0x00000140 0x00000140 IMPORT METH 0 android.os.Handler boolean post(java.lang.Runnable) -76 0x0000014b 0x0000014b IMPORT METH 0 java.io.FileInputStream void (String) -77 0x00000150 0x00000150 IMPORT METH 0 java.util.zip.GZIPInputStream void (java.io.InputStream) -78 0x00000155 0x00000155 IMPORT METH 0 java.lang.String int lastIndexOf(int) -79 0x0000015a 0x0000015a IMPORT METH 0 java.lang.String String substring(int, int) -82 0x00000165 0x00000165 IMPORT METH 0 java.lang.StringBuilder void () -83 0x0000016a 0x0000016a IMPORT METH 0 java.lang.StringBuilder StringBuilder append(String) -85 0x00000172 0x00000172 IMPORT METH 0 java.lang.StringBuilder String toString() -87 0x0000017a 0x0000017a IMPORT METH 0 java.io.FileOutputStream void (String) -88 0x0000017f 0x0000017f IMPORT METH 0 java.util.zip.GZIPInputStream int read(byte[]) -89 0x00000184 0x00000184 IMPORT METH 0 java.io.OutputStream void write(byte[], int, int) -90 0x00000189 0x00000189 IMPORT METH 0 java.util.zip.GZIPInputStream void close() -91 0x0000018e 0x0000018e IMPORT METH 0 java.io.OutputStream void close() -93 0x00000196 0x00000196 IMPORT METH 0 com.ice.tar.TarArchive void (java.io.InputStream) -94 0x0000019b 0x0000019b IMPORT METH 0 com.ice.tar.TarArchive void extractContents(java.io.File) -95 0x000001a0 0x000001a0 IMPORT METH 0 com.ice.tar.TarArchive void closeArchive() -96 0x000001a5 0x000001a5 IMPORT METH 0 java.io.File boolean delete() -98 0x000001ad 0x000001ad IMPORT METH 0 org.radare2.installer.MainActivity$5 void (org.radare2.installer.MainActivity) -100 0x000001b5 0x000001b5 IMPORT METH 0 java.net.URL void (String) -101 0x000001ba 0x000001ba IMPORT METH 0 java.net.URL java.net.URLConnection openConnection() -104 0x000001c5 0x000001c5 IMPORT METH 0 java.net.HttpURLConnection void setRequestMethod(String) -105 0x000001ca 0x000001ca IMPORT METH 0 java.net.HttpURLConnection void setInstanceFollowRedirects(boolean) -106 0x000001cf 0x000001cf IMPORT METH 0 java.net.HttpURLConnection java.util.Map getRequestProperties() -107 0x000001d4 0x000001d4 IMPORT METH 0 java.net.HttpURLConnection void connect() -108 0x000001d9 0x000001d9 IMPORT METH 0 java.net.HttpURLConnection int getContentLength() -110 0x000001e1 0x000001e1 IMPORT METH 0 java.lang.StringBuilder StringBuilder append(int) -113 0x000001ec 0x000001ec IMPORT METH 0 java.net.HttpURLConnection String getHeaderField(String) -114 0x000001f1 0x000001f1 IMPORT METH 0 org.radare2.installer.Utils void StorePref(String, String) -115 0x000001f6 0x000001f6 IMPORT METH 0 java.net.HttpURLConnection java.io.InputStream getInputStream() -117 0x000001fe 0x000001fe IMPORT METH 0 java.io.InputStream int read(byte[]) -118 0x00000203 0x00000203 IMPORT METH 0 java.io.FileOutputStream void write(byte[], int, int) -121 0x0000020e 0x0000020e IMPORT METH 0 org.radare2.installer.MainActivity void resetButtons() -123 0x00000216 0x00000216 IMPORT METH 0 java.io.FileOutputStream void close() -124 0x0000021b 0x0000021b IMPORT METH 0 java.io.InputStream void close() -125 0x00000220 0x00000220 IMPORT METH 0 java.net.HttpURLConnection void disconnect() -127 0x00000228 0x00000228 IMPORT METH 0 java.lang.Exception void printStackTrace() -128 0x0000022d 0x0000022d IMPORT METH 0 android.app.Activity void onResume() -131 0x00000238 0x00000238 IMPORT IMETH 0 android.content.SharedPreferences String getString(String, String) -132 0x0000023d 0x0000023d IMPORT METH 0 java.lang.Integer int parseInt(String) -134 0x00000245 0x00000245 IMPORT IMETH 0 android.content.SharedPreferences boolean getBoolean(String, boolean) -137 0x00000250 0x00000250 IMPORT METH 0 org.radare2.installer.MainActivity Object getSystemService(String) -140 0x0000025b 0x0000025b IMPORT METH 0 android.app.PendingIntent android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int) -141 0x00000260 0x00000260 IMPORT METH 0 android.app.AlarmManager void cancel(android.app.PendingIntent) -142 0x00000265 0x00000265 IMPORT METH 0 android.os.SystemClock long elapsedRealtime() -143 0x0000026a 0x0000026a IMPORT METH 0 android.app.AlarmManager void setInexactRepeating(int, long, long, android.app.PendingIntent) +0 0x00001c1f 0x00001c1f LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.outputView +1 0x00001c27 0x00001c27 LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.handler +2 0x00001c2f 0x00001c2f LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.remoteRunButton +3 0x00001c37 0x00001c37 LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.localRunButton +4 0x00001c3f 0x00001c3f LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.context +5 0x00001c47 0x00001c47 LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.mUtils +6 0x00001c4f 0x00001c4f LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.http_url_default +7 0x00001c57 0x00001c57 LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.onLocalRunButtonClick +8 0x00001c5f 0x00001c5f LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.thread +9 0x00001c67 0x00001c67 LOCAL OBJ 0 org.radare2.installer.MainActivity org.radare2.installer.MainActivity.onRemoteRunButtonClick +1 0x0000000a 0x0000000a IMPORT METH 0 org.radare2.installer.MainActivity imp.boolean download(String, String) +2 0x0000000f 0x0000000f IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.handler +3 0x00000014 0x00000014 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.thread +4 0x00000019 0x00000019 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.outputView +5 0x0000001e 0x0000001e IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.remoteRunButton +6 0x00000023 0x00000023 IMPORT METH 0 org.radare2.installer.MainActivity imp.boolean checkForRadare() +7 0x00000028 0x00000028 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.http_url_default +8 0x0000002d 0x0000002d IMPORT METH 0 org.radare2.installer.MainActivity imp.void output(String) +9 0x00000032 0x00000032 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.mUtils +10 0x00000037 0x00000037 IMPORT METH 0 android.app.Activity imp.void () +12 0x0000003f 0x0000003f IMPORT METH 0 android.os.Handler imp.void () +15 0x0000004a 0x0000004a IMPORT METH 0 org.radare2.installer.MainActivity$2 imp.void (org.radare2.installer.MainActivity) +16 0x0000004f 0x0000004f IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.onLocalRunButtonClick +18 0x00000057 0x00000057 IMPORT METH 0 org.radare2.installer.MainActivity$3 imp.void (org.radare2.installer.MainActivity) +19 0x0000005c 0x0000005c IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.onRemoteRunButtonClick +20 0x00000061 0x00000061 IMPORT METH 0 android.app.Activity imp.void onCreate(android.os.Bundle) +23 0x0000006e 0x0000006e IMPORT METH 0 org.radare2.installer.MainActivity imp.void setContentView(int) +25 0x00000076 0x00000076 IMPORT METH 0 org.radare2.installer.MainActivity imp.android.content.Context getApplicationContext() +26 0x0000007b 0x0000007b IMPORT METH 0 org.radare2.installer.Utils imp.void (android.content.Context) +29 0x00000088 0x00000088 IMPORT METH 0 org.radare2.installer.MainActivity imp.android.view.View findViewById(int) +34 0x0000009d 0x0000009d IMPORT METH 0 org.radare2.installer.Utils imp.String GetPref(String) +36 0x000000a5 0x000000a5 IMPORT METH 0 java.lang.String imp.boolean equals(Object) +37 0x000000aa 0x000000aa IMPORT METH 0 android.widget.CheckBox imp.void setChecked(boolean) +45 0x000000c8 0x000000c8 IMPORT METH 0 android.widget.Button imp.void setOnClickListener(android.view.View$OnClickListener) +47 0x000000d2 0x000000d2 IMPORT FIELD 0 org.radare2.installer.MainActivity imp.org.radare2.installer.MainActivity.localRunButton +49 0x000000da 0x000000da IMPORT METH 0 org.radare2.installer.Utils imp.boolean isInternetAvailable() +50 0x000000df 0x000000df IMPORT METH 0 android.preference.PreferenceManager imp.android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context) +53 0x000000ea 0x000000ea IMPORT METH 0 org.radare2.installer.MainActivity$1 imp.void (org.radare2.installer.MainActivity, android.content.SharedPreferences) +54 0x000000ef 0x000000ef IMPORT METH 0 java.lang.Thread imp.void (java.lang.Runnable) +55 0x000000f4 0x000000f4 IMPORT METH 0 java.lang.Thread imp.void start() +58 0x000000ff 0x000000ff IMPORT IMETH 0 android.view.Menu imp.android.view.MenuItem add(int, int, int, java.lang.CharSequence) +59 0x00000104 0x00000104 IMPORT METH 0 android.app.Activity imp.boolean onCreateOptionsMenu(android.view.Menu) +60 0x00000109 0x00000109 IMPORT IMETH 0 android.view.MenuItem imp.int getItemId() +63 0x00000114 0x00000114 IMPORT METH 0 android.content.Intent imp.void (android.content.Context, Class) +65 0x0000011e 0x0000011e IMPORT METH 0 android.content.Intent imp.android.content.Intent setFlags(int) +66 0x00000123 0x00000123 IMPORT METH 0 org.radare2.installer.MainActivity imp.void startActivity(android.content.Intent) +69 0x0000012e 0x0000012e IMPORT METH 0 java.io.File imp.void (String) +70 0x00000133 0x00000133 IMPORT METH 0 java.io.File imp.boolean exists() +72 0x0000013b 0x0000013b IMPORT METH 0 org.radare2.installer.MainActivity$4 imp.void (org.radare2.installer.MainActivity, String) +73 0x00000140 0x00000140 IMPORT METH 0 android.os.Handler imp.boolean post(java.lang.Runnable) +76 0x0000014b 0x0000014b IMPORT METH 0 java.io.FileInputStream imp.void (String) +77 0x00000150 0x00000150 IMPORT METH 0 java.util.zip.GZIPInputStream imp.void (java.io.InputStream) +78 0x00000155 0x00000155 IMPORT METH 0 java.lang.String imp.int lastIndexOf(int) +79 0x0000015a 0x0000015a IMPORT METH 0 java.lang.String imp.String substring(int, int) +82 0x00000165 0x00000165 IMPORT METH 0 java.lang.StringBuilder imp.void () +83 0x0000016a 0x0000016a IMPORT METH 0 java.lang.StringBuilder imp.StringBuilder append(String) +85 0x00000172 0x00000172 IMPORT METH 0 java.lang.StringBuilder imp.String toString() +87 0x0000017a 0x0000017a IMPORT METH 0 java.io.FileOutputStream imp.void (String) +88 0x0000017f 0x0000017f IMPORT METH 0 java.util.zip.GZIPInputStream imp.int read(byte[]) +89 0x00000184 0x00000184 IMPORT METH 0 java.io.OutputStream imp.void write(byte[], int, int) +90 0x00000189 0x00000189 IMPORT METH 0 java.util.zip.GZIPInputStream imp.void close() +91 0x0000018e 0x0000018e IMPORT METH 0 java.io.OutputStream imp.void close() +93 0x00000196 0x00000196 IMPORT METH 0 com.ice.tar.TarArchive imp.void (java.io.InputStream) +94 0x0000019b 0x0000019b IMPORT METH 0 com.ice.tar.TarArchive imp.void extractContents(java.io.File) +95 0x000001a0 0x000001a0 IMPORT METH 0 com.ice.tar.TarArchive imp.void closeArchive() +96 0x000001a5 0x000001a5 IMPORT METH 0 java.io.File imp.boolean delete() +98 0x000001ad 0x000001ad IMPORT METH 0 org.radare2.installer.MainActivity$5 imp.void (org.radare2.installer.MainActivity) +100 0x000001b5 0x000001b5 IMPORT METH 0 java.net.URL imp.void (String) +101 0x000001ba 0x000001ba IMPORT METH 0 java.net.URL imp.java.net.URLConnection openConnection() +104 0x000001c5 0x000001c5 IMPORT METH 0 java.net.HttpURLConnection imp.void setRequestMethod(String) +105 0x000001ca 0x000001ca IMPORT METH 0 java.net.HttpURLConnection imp.void setInstanceFollowRedirects(boolean) +106 0x000001cf 0x000001cf IMPORT METH 0 java.net.HttpURLConnection imp.java.util.Map getRequestProperties() +107 0x000001d4 0x000001d4 IMPORT METH 0 java.net.HttpURLConnection imp.void connect() +108 0x000001d9 0x000001d9 IMPORT METH 0 java.net.HttpURLConnection imp.int getContentLength() +110 0x000001e1 0x000001e1 IMPORT METH 0 java.lang.StringBuilder imp.StringBuilder append(int) +113 0x000001ec 0x000001ec IMPORT METH 0 java.net.HttpURLConnection imp.String getHeaderField(String) +114 0x000001f1 0x000001f1 IMPORT METH 0 org.radare2.installer.Utils imp.void StorePref(String, String) +115 0x000001f6 0x000001f6 IMPORT METH 0 java.net.HttpURLConnection imp.java.io.InputStream getInputStream() +117 0x000001fe 0x000001fe IMPORT METH 0 java.io.InputStream imp.int read(byte[]) +118 0x00000203 0x00000203 IMPORT METH 0 java.io.FileOutputStream imp.void write(byte[], int, int) +121 0x0000020e 0x0000020e IMPORT METH 0 org.radare2.installer.MainActivity imp.void resetButtons() +123 0x00000216 0x00000216 IMPORT METH 0 java.io.FileOutputStream imp.void close() +124 0x0000021b 0x0000021b IMPORT METH 0 java.io.InputStream imp.void close() +125 0x00000220 0x00000220 IMPORT METH 0 java.net.HttpURLConnection imp.void disconnect() +127 0x00000228 0x00000228 IMPORT METH 0 java.lang.Exception imp.void printStackTrace() +128 0x0000022d 0x0000022d IMPORT METH 0 android.app.Activity imp.void onResume() +131 0x00000238 0x00000238 IMPORT IMETH 0 android.content.SharedPreferences imp.String getString(String, String) +132 0x0000023d 0x0000023d IMPORT METH 0 java.lang.Integer imp.int parseInt(String) +134 0x00000245 0x00000245 IMPORT IMETH 0 android.content.SharedPreferences imp.boolean getBoolean(String, boolean) +137 0x00000250 0x00000250 IMPORT METH 0 org.radare2.installer.MainActivity imp.Object getSystemService(String) +140 0x0000025b 0x0000025b IMPORT METH 0 android.app.PendingIntent imp.android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int) +141 0x00000260 0x00000260 IMPORT METH 0 android.app.AlarmManager imp.void cancel(android.app.PendingIntent) +142 0x00000265 0x00000265 IMPORT METH 0 android.os.SystemClock imp.long elapsedRealtime() +143 0x0000026a 0x0000026a IMPORT METH 0 android.app.AlarmManager imp.void setInexactRepeating(int, long, long, android.app.PendingIntent) EOF RUN @@ -370,23 +370,23 @@ NAME=Java list symbols Main.class FILE=bins/java/Main.class CMDS=is EXPECT=<() -1 0x000003b4 0x000003b4 LOCAL FUNC 206 Main void (String[]) -1 0x0000000a 0x0000000a IMPORT METH 0 java.lang.Object void () -2 0x0000000f 0x0000000f IMPORT FIELD 0 java.lang.System imp.out -4 0x00000017 0x00000017 IMPORT METH 0 java.io.PrintStream void println(String) -8 0x00000025 0x00000025 IMPORT METH 0 java.io.FileReader void (String) -9 0x0000002a 0x0000002a IMPORT METH 0 java.io.BufferedReader void (java.io.Reader) -10 0x0000002f 0x0000002f IMPORT METH 0 java.io.BufferedReader String readLine() -12 0x00000037 0x00000037 IMPORT METH 0 java.lang.StringBuilder void () -14 0x0000003f 0x0000003f IMPORT METH 0 java.lang.StringBuilder StringBuilder append(String) -15 0x00000044 0x00000044 IMPORT METH 0 java.lang.StringBuilder String toString() -16 0x00000049 0x00000049 IMPORT METH 0 java.io.BufferedReader void close() -18 0x00000051 0x00000051 IMPORT FIELD 0 java.lang.System imp.err -21 0x0000005c 0x0000005c IMPORT METH 0 java.io.PrintStream java.io.PrintStream format(String, Object[]) -22 0x00000061 0x00000061 IMPORT METH 0 java.lang.Exception void printStackTrace() +1 0x000003b4 0x000003b4 LOCAL FUNC 206 Main void main(String[]) +1 0x0000000a 0x0000000a IMPORT METH 0 java.lang.Object imp.void () +2 0x0000000f 0x0000000f IMPORT FIELD 0 java.lang.System imp.System.out +4 0x00000017 0x00000017 IMPORT METH 0 java.io.PrintStream imp.void println(String) +8 0x00000025 0x00000025 IMPORT METH 0 java.io.FileReader imp.void (String) +9 0x0000002a 0x0000002a IMPORT METH 0 java.io.BufferedReader imp.void (java.io.Reader) +10 0x0000002f 0x0000002f IMPORT METH 0 java.io.BufferedReader imp.String readLine() +12 0x00000037 0x00000037 IMPORT METH 0 java.lang.StringBuilder imp.void () +14 0x0000003f 0x0000003f IMPORT METH 0 java.lang.StringBuilder imp.StringBuilder append(String) +15 0x00000044 0x00000044 IMPORT METH 0 java.lang.StringBuilder imp.String toString() +16 0x00000049 0x00000049 IMPORT METH 0 java.io.BufferedReader imp.void close() +18 0x00000051 0x00000051 IMPORT FIELD 0 java.lang.System imp.System.err +21 0x0000005c 0x0000005c IMPORT METH 0 java.io.PrintStream imp.java.io.PrintStream format(String, Object[]) +22 0x00000061 0x00000061 IMPORT METH 0 java.lang.Exception imp.void printStackTrace() EOF RUN @@ -405,8 +405,8 @@ NAME=Java list symbols test.class FILE=bins/java/test.class CMDS=is EXPECT=<() 1 0x0000092e 0x0000092e LOCAL FUNC 50 test void (groovy.lang.Binding) 2 0x0000096e 0x0000096e LOCAL FUNC 50 test void main(String[]) @@ -415,31 +415,31 @@ nth paddr vaddr bind type size lib 5 0x00000afb 0x00000afb LOCAL FUNC 97 test void $createCallSiteArray_1(String[]) 6 0x00000b6a 0x00000b6a LOCAL FUNC 33 test org.codehaus.groovy.runtime.callsite.CallSiteArray $createCallSiteArray() 7 0x00000b99 0x00000b99 LOCAL FUNC 52 test org.codehaus.groovy.runtime.callsite.CallSite[] $getCallSiteArray() -0 0x000008c9 0x000008c9 LOCAL OBJ 0 test.$staticClassInfo -1 0x000008d1 0x000008d1 LOCAL OBJ 0 test.__$stMC -2 0x000008d9 0x000008d9 LOCAL OBJ 0 test.$callSiteArray -13 0x0000009c 0x0000009c IMPORT METH 0 groovy.lang.Script void () -17 0x000000ef 0x000000ef IMPORT METH 0 test org.codehaus.groovy.runtime.callsite.CallSite[] $getCallSiteArray() -22 0x00000124 0x00000124 IMPORT METH 0 groovy.lang.Script void (groovy.lang.Binding) -35 0x0000022b 0x0000022b IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite Object call(Object, Object, Object) -55 0x00000317 0x00000317 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite Object callConstructor(Object, Object) -61 0x0000038b 0x0000038b IMPORT METH 0 org.codehaus.groovy.runtime.ScriptBytecodeAdapter java.util.Map createMap(Object[]) -67 0x000003a7 0x000003a7 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite Object call(Object, Object) -71 0x00000402 0x00000402 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite Object callCurrent(groovy.lang.GroovyObject, Object) -79 0x00000459 0x00000459 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite Object callGetProperty(Object) -92 0x000004b5 0x000004b5 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite Object call(Object) -100 0x0000052d 0x0000052d IMPORT METH 0 java.lang.Object Class getClass() -104 0x00000575 0x00000575 IMPORT METH 0 org.codehaus.groovy.runtime.ScriptBytecodeAdapter groovy.lang.MetaClass initMetaClass(Object) -106 0x0000057f 0x0000057f IMPORT FIELD 0 test imp.$staticClassInfo -112 0x00000606 0x00000606 IMPORT METH 0 org.codehaus.groovy.reflection.ClassInfo org.codehaus.groovy.reflection.ClassInfo getClassInfo(Class) -115 0x0000061f 0x0000061f IMPORT METH 0 org.codehaus.groovy.reflection.ClassInfo groovy.lang.MetaClass getMetaClass() -147 0x00000767 0x00000767 IMPORT METH 0 test void $createCallSiteArray_1(String[]) -152 0x000007d3 0x000007d3 IMPORT METH 0 org.codehaus.groovy.runtime.callsite.CallSiteArray void (Class, String[]) -154 0x000007dd 0x000007dd IMPORT FIELD 0 test imp.$callSiteArray -159 0x0000080e 0x0000080e IMPORT METH 0 java.lang.ref.SoftReference Object get() -161 0x00000818 0x00000818 IMPORT METH 0 test org.codehaus.groovy.runtime.callsite.CallSiteArray $createCallSiteArray() -164 0x0000083a 0x0000083a IMPORT METH 0 java.lang.ref.SoftReference void (Object) -168 0x0000087f 0x0000087f IMPORT FIELD 0 org.codehaus.groovy.runtime.callsite.CallSiteArray imp.array +0 0x000008c9 0x000008c9 LOCAL OBJ 0 test test.$staticClassInfo +1 0x000008d1 0x000008d1 LOCAL OBJ 0 test test.__$stMC +2 0x000008d9 0x000008d9 LOCAL OBJ 0 test test.$callSiteArray +13 0x0000009c 0x0000009c IMPORT METH 0 groovy.lang.Script imp.void () +17 0x000000ef 0x000000ef IMPORT METH 0 test imp.org.codehaus.groovy.runtime.callsite.CallSite[] $getCallSiteArray() +22 0x00000124 0x00000124 IMPORT METH 0 groovy.lang.Script imp.void (groovy.lang.Binding) +35 0x0000022b 0x0000022b IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite imp.Object call(Object, Object, Object) +55 0x00000317 0x00000317 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite imp.Object callConstructor(Object, Object) +61 0x0000038b 0x0000038b IMPORT METH 0 org.codehaus.groovy.runtime.ScriptBytecodeAdapter imp.java.util.Map createMap(Object[]) +67 0x000003a7 0x000003a7 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite imp.Object call(Object, Object) +71 0x00000402 0x00000402 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite imp.Object callCurrent(groovy.lang.GroovyObject, Object) +79 0x00000459 0x00000459 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite imp.Object callGetProperty(Object) +92 0x000004b5 0x000004b5 IMPORT IMETH 0 org.codehaus.groovy.runtime.callsite.CallSite imp.Object call(Object) +100 0x0000052d 0x0000052d IMPORT METH 0 java.lang.Object imp.Class getClass() +104 0x00000575 0x00000575 IMPORT METH 0 org.codehaus.groovy.runtime.ScriptBytecodeAdapter imp.groovy.lang.MetaClass initMetaClass(Object) +106 0x0000057f 0x0000057f IMPORT FIELD 0 test imp.test.$staticClassInfo +112 0x00000606 0x00000606 IMPORT METH 0 org.codehaus.groovy.reflection.ClassInfo imp.org.codehaus.groovy.reflection.ClassInfo getClassInfo(Class) +115 0x0000061f 0x0000061f IMPORT METH 0 org.codehaus.groovy.reflection.ClassInfo imp.groovy.lang.MetaClass getMetaClass() +147 0x00000767 0x00000767 IMPORT METH 0 test imp.void $createCallSiteArray_1(String[]) +152 0x000007d3 0x000007d3 IMPORT METH 0 org.codehaus.groovy.runtime.callsite.CallSiteArray imp.void (Class, String[]) +154 0x000007dd 0x000007dd IMPORT FIELD 0 test imp.test.$callSiteArray +159 0x0000080e 0x0000080e IMPORT METH 0 java.lang.ref.SoftReference imp.Object get() +161 0x00000818 0x00000818 IMPORT METH 0 test imp.org.codehaus.groovy.runtime.callsite.CallSiteArray $createCallSiteArray() +164 0x0000083a 0x0000083a IMPORT METH 0 java.lang.ref.SoftReference imp.void (Object) +168 0x0000087f 0x0000087f IMPORT FIELD 0 org.codehaus.groovy.runtime.callsite.CallSiteArray imp.org.codehaus.groovy.runtime.callsite.CallSiteArray.array EOF RUN @@ -448,38 +448,38 @@ NAME=Java list symbols TryWithResources.class FILE=bins/java/TryWithResources.class CMDS=is EXPECT=<(int) 2 0x00000484 0x00000484 LOCAL FUNC 62 TryWithResources void close() 3 0x000004d0 0x000004d0 LOCAL FUNC 29 TryWithResources void $(int, RuntimeException) 4 0x000004fb 0x000004fb LOCAL FUNC 20 TryWithResources void $(RuntimeException) 5 0x0000051d 0x0000051d LOCAL FUNC 23 TryWithResources void main(String[]) -6 0x0000054c 0x0000054c LOCAL FUNC 18879 TryWithResources main([[Ljava/lang/String;)V +6 0x0000054c 0x0000054c LOCAL FUNC 18879 TryWithResources TryWithResources.main 7 0x00004f19 0x00004f19 LOCAL FUNC 24 TryWithResources void () -0 0x000003f9 0x000003f9 LOCAL OBJ 0 TryWithResources.$ -1 0x00000401 0x00000401 LOCAL OBJ 0 TryWithResources.i -2 0x0000000d 0x0000000d IMPORT METH 0 TryWithResources void (int) -3 0x00000012 0x00000012 IMPORT METH 0 java.lang.RuntimeException void () -4 0x00000017 0x00000017 IMPORT FIELD 0 java.lang.System imp.out -6 0x0000001f 0x0000001f IMPORT METH 0 java.lang.StringBuilder void () -8 0x00000027 0x00000027 IMPORT METH 0 java.lang.StringBuilder StringBuilder append(String) -9 0x0000002c 0x0000002c IMPORT METH 0 java.lang.StringBuilder StringBuilder append(int) -10 0x00000031 0x00000031 IMPORT METH 0 java.lang.StringBuilder String toString() -11 0x00000036 0x00000036 IMPORT METH 0 java.io.PrintStream void println(String) -12 0x0000003b 0x0000003b IMPORT FIELD 0 TryWithResources imp.i -14 0x00000043 0x00000043 IMPORT METH 0 java.io.PrintStream void println(Object) -15 0x00000048 0x00000048 IMPORT FIELD 0 TryWithResources imp.$ -17 0x00000050 0x00000050 IMPORT FUNC 0 TryWithResources imp.main([[Ljava/lang/String;)V -19 0x00000058 0x00000058 IMPORT METH 0 TryWithResources void $(RuntimeException) -20 0x0000005d 0x0000005d IMPORT METH 0 java.io.PrintStream void println(int) -21 0x00000062 0x00000062 IMPORT METH 0 TryWithResources void $(int, RuntimeException) -22 0x00000067 0x00000067 IMPORT METH 0 TryWithResources void close() -24 0x0000006f 0x0000006f IMPORT METH 0 java.lang.Throwable void addSuppressed(Throwable) -25 0x00000074 0x00000074 IMPORT METH 0 TryWithResources TryWithResources $(int) -26 0x00000079 0x00000079 IMPORT IMETH 0 java.lang.AutoCloseable void close() -27 0x0000007e 0x0000007e IMPORT METH 0 java.lang.Throwable void printStackTrace() +0 0x000003f9 0x000003f9 LOCAL OBJ 0 TryWithResources TryWithResources.$ +1 0x00000401 0x00000401 LOCAL OBJ 0 TryWithResources TryWithResources.i +2 0x0000000d 0x0000000d IMPORT METH 0 TryWithResources imp.void (int) +3 0x00000012 0x00000012 IMPORT METH 0 java.lang.RuntimeException imp.void () +4 0x00000017 0x00000017 IMPORT FIELD 0 java.lang.System imp.System.out +6 0x0000001f 0x0000001f IMPORT METH 0 java.lang.StringBuilder imp.void () +8 0x00000027 0x00000027 IMPORT METH 0 java.lang.StringBuilder imp.StringBuilder append(String) +9 0x0000002c 0x0000002c IMPORT METH 0 java.lang.StringBuilder imp.StringBuilder append(int) +10 0x00000031 0x00000031 IMPORT METH 0 java.lang.StringBuilder imp.String toString() +11 0x00000036 0x00000036 IMPORT METH 0 java.io.PrintStream imp.void println(String) +12 0x0000003b 0x0000003b IMPORT FIELD 0 TryWithResources imp.TryWithResources.i +14 0x00000043 0x00000043 IMPORT METH 0 java.io.PrintStream imp.void println(Object) +15 0x00000048 0x00000048 IMPORT FIELD 0 TryWithResources imp.TryWithResources.$ +17 0x00000050 0x00000050 IMPORT FUNC 0 TryWithResources imp.TryWithResources.main +19 0x00000058 0x00000058 IMPORT METH 0 TryWithResources imp.void $(RuntimeException) +20 0x0000005d 0x0000005d IMPORT METH 0 java.io.PrintStream imp.void println(int) +21 0x00000062 0x00000062 IMPORT METH 0 TryWithResources imp.void $(int, RuntimeException) +22 0x00000067 0x00000067 IMPORT METH 0 TryWithResources imp.void close() +24 0x0000006f 0x0000006f IMPORT METH 0 java.lang.Throwable imp.void addSuppressed(Throwable) +25 0x00000074 0x00000074 IMPORT METH 0 TryWithResources imp.TryWithResources $(int) +26 0x00000079 0x00000079 IMPORT IMETH 0 java.lang.AutoCloseable imp.void close() +27 0x0000007e 0x0000007e IMPORT METH 0 java.lang.Throwable imp.void printStackTrace() EOF RUN @@ -507,21 +507,21 @@ NAME=Java list classes DemoTest.class FILE=bins/java/DemoTest.class CMDS=<()V -0x000001e8 2 LDemoTest; p res()Ljava/lang/String; -0x00000211 3 LDemoTest; sp main([Ljava/lang/String;)V +address index class flags name +---------------------------------------------------- +0x00000190 0 DemoTest p int fun() +0x000001b9 1 DemoTest p void () +0x000001e8 2 DemoTest p String res() +0x00000211 3 DemoTest sp void main(String[]) EOF RUN @@ -530,25 +530,25 @@ NAME=Java list classes ExCaseTableSwitch.class FILE=bins/java/ExCaseTableSwitch.class CMDS=<()V -0x000004a1 1 LCaseTableSwitch; p a(I)Ljava/lang/String; -0x000005df 2 LCaseTableSwitch; p a(Ljava/lang/String;)I -0x00000623 3 LCaseTableSwitch; p a()I -0x0000065d 4 LCaseTableSwitch; p hopskip_line_switch()V -0x00000816 5 LCaseTableSwitch; p straight_line_switch()V -0x000009ea 6 LCaseTableSwitch; p straight_line_switch_()V -0x00000bb6 7 LCaseTableSwitch; sp main([Ljava/lang/String;)V +0x00000464 0 CaseTableSwitch p void () +0x000004a1 1 CaseTableSwitch p String a(int) +0x000005df 2 CaseTableSwitch p int a(String) +0x00000623 3 CaseTableSwitch p int a() +0x0000065d 4 CaseTableSwitch p void hopskip_line_switch() +0x00000816 5 CaseTableSwitch p void straight_line_switch() +0x000009ea 6 CaseTableSwitch p void straight_line_switch_() +0x00000bb6 7 CaseTableSwitch sp void main(String[]) EOF RUN @@ -576,21 +576,21 @@ NAME=Java list classes Hello.class FILE=bins/java/Hello.class CMDS=<(Ljava/lang/String;)V -0x00000263 1 LHello; p say()V -0x000002aa 2 LHello; sp main([Ljava/lang/String;)V +address min max name super +---------------------------------------------- +0x00000000 0x0000022b 0x000002d3 Hello Object +address index class flags name type +----------------------------------------- +0x0000020b 0 Hello P who String +address index class flags name +------------------------------------------------- +0x0000022b 0 Hello p void (String) +0x00000263 1 Hello p void say() +0x000002aa 2 Hello sp void main(String[]) EOF RUN @@ -599,18 +599,18 @@ NAME=Java list classes HiKt.class FILE=bins/java/HiKt.class CMDS=<()V -0x00000364 1 LJDWPExecCmd; sp run(Ljava/lang/String;)Ljava/lang/String; +address index class flags name +------------------------------------------------------ +0x00000339 0 JDWPExecCmd p void () +0x00000364 1 JDWPExecCmd sp String run(String) EOF RUN @@ -660,48 +660,48 @@ NAME=Java list classes MainActivity.class FILE=bins/java/MainActivity.class CMDS=<()V -0x00001d06 1 Lorg/radare2/installer/MainActivity; p onCreate(Landroid/os/Bundle;)V -0x00001f02 2 Lorg/radare2/installer/MainActivity; p onCreateOptionsMenu(Landroid/view/Menu;)Z -0x00001f5a 3 Lorg/radare2/installer/MainActivity; p onOptionsItemSelected(Landroid/view/MenuItem;)Z -0x00001ff7 4 Lorg/radare2/installer/MainActivity; P checkForRadare()Z -0x0000204c 5 Lorg/radare2/installer/MainActivity; P output(Ljava/lang/String;)V -0x000020b4 6 Lorg/radare2/installer/MainActivity; sp unTarGz(Ljava/lang/String;Ljava/lang/String;)V -0x00002254 7 Lorg/radare2/installer/MainActivity; P resetButtons()V -0x000022b1 8 Lorg/radare2/installer/MainActivity; P download(Ljava/lang/String;Ljava/lang/String;)Z -0x000025e6 9 Lorg/radare2/installer/MainActivity; p onResume()V -0x00002720 10 Lorg/radare2/installer/MainActivity; sh access$000(Lorg/radare2/installer/MainActivity;)Lorg/radare2/installer/Utils; -0x0000275d 11 Lorg/radare2/installer/MainActivity; sh access$100(Lorg/radare2/installer/MainActivity;Ljava/lang/String;)V -0x000027a5 12 Lorg/radare2/installer/MainActivity; sh access$200(Lorg/radare2/installer/MainActivity;)Ljava/lang/String; -0x000027e2 13 Lorg/radare2/installer/MainActivity; sh access$300(Lorg/radare2/installer/MainActivity;)Z -0x0000281f 14 Lorg/radare2/installer/MainActivity; sh access$402(Lorg/radare2/installer/MainActivity;Landroid/widget/Button;)Landroid/widget/Button; -0x00002868 15 Lorg/radare2/installer/MainActivity; sh access$400(Lorg/radare2/installer/MainActivity;)Landroid/widget/Button; -0x000028a5 16 Lorg/radare2/installer/MainActivity; sh access$500(Lorg/radare2/installer/MainActivity;)Landroid/widget/TextView; -0x000028e2 17 Lorg/radare2/installer/MainActivity; sh access$600(Lorg/radare2/installer/MainActivity;)Ljava/lang/Thread; -0x0000291f 18 Lorg/radare2/installer/MainActivity; sh access$602(Lorg/radare2/installer/MainActivity;Ljava/lang/Thread;)Ljava/lang/Thread; -0x00002968 19 Lorg/radare2/installer/MainActivity; sh access$700(Lorg/radare2/installer/MainActivity;)Landroid/os/Handler; -0x000029a5 20 Lorg/radare2/installer/MainActivity; sh access$800(Lorg/radare2/installer/MainActivity;Ljava/lang/String;Ljava/lang/String;)Z +address min max name super +----------------------------------------------------------------------------------------- +0x00000000 0x00001c87 0x000029ea org.radare2.installer.MainActivity android.app.Activity +address index class flags name type +------------------------------------------------------------------------------------------------------------------- +0x00001c1f 0 org.radare2.installer.MainActivity P outputView android.widget.TextView +0x00001c27 1 org.radare2.installer.MainActivity P handler android.os.Handler +0x00001c2f 2 org.radare2.installer.MainActivity P remoteRunButton android.widget.Button +0x00001c37 3 org.radare2.installer.MainActivity P localRunButton android.widget.Button +0x00001c3f 4 org.radare2.installer.MainActivity P context android.content.Context +0x00001c47 5 org.radare2.installer.MainActivity P mUtils org.radare2.installer.Utils +0x00001c4f 6 org.radare2.installer.MainActivity P http_url_default String +0x00001c57 7 org.radare2.installer.MainActivity P onLocalRunButtonClick android.view.View$OnClickListener +0x00001c5f 8 org.radare2.installer.MainActivity P thread Thread +0x00001c67 9 org.radare2.installer.MainActivity P onRemoteRunButtonClick android.view.View$OnClickListener +address index class flags name +------------------------------------------------------------------------------------------------------------------------------------------------------ +0x00001c87 0 org.radare2.installer.MainActivity p void () +0x00001d06 1 org.radare2.installer.MainActivity p void onCreate(android.os.Bundle) +0x00001f02 2 org.radare2.installer.MainActivity p boolean onCreateOptionsMenu(android.view.Menu) +0x00001f5a 3 org.radare2.installer.MainActivity p boolean onOptionsItemSelected(android.view.MenuItem) +0x00001ff7 4 org.radare2.installer.MainActivity P boolean checkForRadare() +0x0000204c 5 org.radare2.installer.MainActivity P void output(String) +0x000020b4 6 org.radare2.installer.MainActivity sp void unTarGz(String, String) +0x00002254 7 org.radare2.installer.MainActivity P void resetButtons() +0x000022b1 8 org.radare2.installer.MainActivity P boolean download(String, String) +0x000025e6 9 org.radare2.installer.MainActivity p void onResume() +0x00002720 10 org.radare2.installer.MainActivity sh org.radare2.installer.Utils access$000(org.radare2.installer.MainActivity) +0x0000275d 11 org.radare2.installer.MainActivity sh void access$100(org.radare2.installer.MainActivity, String) +0x000027a5 12 org.radare2.installer.MainActivity sh String access$200(org.radare2.installer.MainActivity) +0x000027e2 13 org.radare2.installer.MainActivity sh boolean access$300(org.radare2.installer.MainActivity) +0x0000281f 14 org.radare2.installer.MainActivity sh android.widget.Button access$402(org.radare2.installer.MainActivity, android.widget.Button) +0x00002868 15 org.radare2.installer.MainActivity sh android.widget.Button access$400(org.radare2.installer.MainActivity) +0x000028a5 16 org.radare2.installer.MainActivity sh android.widget.TextView access$500(org.radare2.installer.MainActivity) +0x000028e2 17 org.radare2.installer.MainActivity sh Thread access$600(org.radare2.installer.MainActivity) +0x0000291f 18 org.radare2.installer.MainActivity sh Thread access$602(org.radare2.installer.MainActivity, Thread) +0x00002968 19 org.radare2.installer.MainActivity sh android.os.Handler access$700(org.radare2.installer.MainActivity) +0x000029a5 20 org.radare2.installer.MainActivity sh boolean access$800(org.radare2.installer.MainActivity, String, String) EOF RUN @@ -710,19 +710,19 @@ NAME=Java list classes Main.class FILE=bins/java/Main.class CMDS=<()V -0x000003b4 1 LMain; sp main([Ljava/lang/String;)V +address index class flags name +------------------------------------------------- +0x00000389 0 Main p void () +0x000003b4 1 Main sp void main(String[]) EOF RUN @@ -741,28 +741,28 @@ NAME=Java list classes test.class FILE=bins/java/test.class CMDS=<()V -0x0000092e 1 Ltest; p (Lgroovy/lang/Binding;)V -0x0000096e 2 Ltest; spg main([Ljava/lang/String;)V -0x000009ae 3 Ltest; p run()Ljava/lang/Object; -0x00000aba 4 Ltest; rh $getStaticMetaClass()Lgroovy/lang/MetaClass; -0x00000afb 5 Ltest; sPh $createCallSiteArray_1([Ljava/lang/String;)V -0x00000b6a 6 Ltest; sPh $createCallSiteArray()Lorg/codehaus/groovy/runtime/callsite/CallSiteArray; -0x00000b99 7 Ltest; sPh $getCallSiteArray()[Lorg/codehaus/groovy/runtime/callsite/CallSite; +address min max name super +--------------------------------------------------------- +0x00000000 0x000008f9 0x00000bcd test groovy.lang.Script +address index class flags name type +--------------------------------------------------------------------------------------- +0x000008c9 0 test sPh $staticClassInfo org.codehaus.groovy.reflection.ClassInfo +0x000008d1 1 test spgh __$stMC boolean +0x000008d9 2 test sPh $callSiteArray java.lang.ref.SoftReference +address index class flags name +------------------------------------------------------------------------------------------------------- +0x000008f9 0 test p void () +0x0000092e 1 test p void (groovy.lang.Binding) +0x0000096e 2 test spg void main(String[]) +0x000009ae 3 test p Object run() +0x00000aba 4 test rh groovy.lang.MetaClass $getStaticMetaClass() +0x00000afb 5 test sPh void $createCallSiteArray_1(String[]) +0x00000b6a 6 test sPh org.codehaus.groovy.runtime.callsite.CallSiteArray $createCallSiteArray() +0x00000b99 7 test sPh org.codehaus.groovy.runtime.callsite.CallSite[] $getCallSiteArray() EOF RUN @@ -771,27 +771,27 @@ NAME=Java list classes TryWithResources.class FILE=bins/java/TryWithResources.class CMDS=<(I)V -0x00000484 2 LTryWithResources; p close()V -0x000004d0 3 LTryWithResources; sp $(ILjava/lang/RuntimeException;)V -0x000004fb 4 LTryWithResources; sp $(Ljava/lang/RuntimeException;)V -0x0000051d 5 LTryWithResources; sp main([Ljava/lang/String;)V -0x0000054c 6 LTryWithResources; pg main([[Ljava/lang/String;)V -0x00004f19 7 LTryWithResources; s ()V +address min max name super +------------------------------------------------------------------- +0x00000000 0x00000421 0x00004f31 TryWithResources RuntimeException +address index class flags name type +-------------------------------------------------------------- +0x000003f9 0 TryWithResources sp $ TryWithResources +0x00000401 1 TryWithResources pf i int +address index class flags name +---------------------------------------------------------------------- +0x00000421 0 TryWithResources sp TryWithResources $(int) +0x00000444 1 TryWithResources p void (int) +0x00000484 2 TryWithResources p void close() +0x000004d0 3 TryWithResources sp void $(int, RuntimeException) +0x000004fb 4 TryWithResources sp void $(RuntimeException) +0x0000051d 5 TryWithResources sp void main(String[]) +0x0000054c 6 TryWithResources pg TryWithResources.main +0x00004f19 7 TryWithResources s void () EOF RUN @@ -812,11 +812,11 @@ NAME=Java list imports DemoTest.class FILE=bins/java/DemoTest.class CMDS=ii EXPECT=< -3 0x00000012 NONE FIELD java.lang System.out -5 0x0000001a NONE METH java.io PrintStream.println +nth vaddr bind type lib name +-------------------------------------------------------------------------- +1 ---------- NONE METH java.lang.Object Object. +3 ---------- NONE FIELD java.lang.System System.out +5 ---------- NONE METH java.io.PrintStream java.io.PrintStream.println EOF RUN @@ -825,17 +825,17 @@ NAME=Java list imports ExCaseTableSwitch.class FILE=bins/java/ExCaseTableSwitch.class CMDS=ii EXPECT=< -16 0x000000b3 NONE FIELD java.lang System.out -26 0x0000004b NONE METH java.lang StringBuilder. -29 0x0000013f NONE METH java.lang StringBuilder.append -33 0x00000171 NONE METH java.lang StringBuilder.toString -37 0x0000019d NONE METH java.io PrintStream.println -46 0x0000004b NONE METH java.lang String. -55 0x00000267 NONE METH java.lang Integer.valueOf -61 0x000002ab NONE METH TestVariableSwitchUp.TestMultipleVariable +nth vaddr bind type lib name +-------------------------------------------------------------------------------------------- +8 ---------- NONE METH java.lang.Object Object. +16 ---------- NONE FIELD java.lang.System System.out +26 ---------- NONE METH java.lang.StringBuilder StringBuilder. +29 ---------- NONE METH java.lang.StringBuilder StringBuilder.append +33 ---------- NONE METH java.lang.StringBuilder StringBuilder.toString +37 ---------- NONE METH java.io.PrintStream java.io.PrintStream.println +46 ---------- NONE METH java.lang.String String. +55 ---------- NONE METH java.lang.Integer Integer.valueOf +61 ---------- NONE METH TestVariableSwitchUp TestVariableSwitchUp.TestMultipleVariable EOF RUN @@ -854,17 +854,17 @@ NAME=Java list imports Hello.class FILE=bins/java/Hello.class CMDS=ii EXPECT=< -2 0x0000000f NONE FIELD Hello.who -3 0x00000014 NONE FIELD java.lang System.out -5 0x0000000a NONE METH java.lang StringBuilder. -7 0x00000024 NONE METH java.lang StringBuilder.append -8 0x00000029 NONE METH java.lang StringBuilder.toString -9 0x0000002e NONE METH java.io PrintStream.println -12 0x0000000a NONE METH Hello. -13 0x0000003e NONE METH Hello.say +nth vaddr bind type lib name +------------------------------------------------------------------------------ +1 ---------- NONE METH java.lang.Object Object. +2 ---------- NONE FIELD Hello Hello.who +3 ---------- NONE FIELD java.lang.System System.out +5 ---------- NONE METH java.lang.StringBuilder StringBuilder. +7 ---------- NONE METH java.lang.StringBuilder StringBuilder.append +8 ---------- NONE METH java.lang.StringBuilder StringBuilder.toString +9 ---------- NONE METH java.io.PrintStream java.io.PrintStream.println +12 ---------- NONE METH Hello Hello. +13 ---------- NONE METH Hello Hello.say EOF RUN @@ -873,9 +873,9 @@ NAME=Java list imports HiKt.class FILE=bins/java/HiKt.class CMDS=ii EXPECT=< -3 0x0000000a NONE METH java.lang StringBuilder. -4 0x00000017 NONE METH java.lang StringBuilder.append -6 0x0000001f NONE METH java.lang StringBuilder.toString -7 0x00000024 NONE METH java.lang Runtime.getRuntime -8 0x00000029 NONE METH java.lang Runtime.exec -11 0x00000034 NONE METH java.lang Process.getInputStream -12 0x0000000a NONE METH java.io InputStreamReader. -13 0x0000000a NONE METH java.io BufferedReader. -14 0x00000043 NONE METH java.io BufferedReader.readLine -15 0x00000048 NONE METH java.lang String.trim +nth vaddr bind type lib name +------------------------------------------------------------------------------------ +1 ---------- NONE METH java.lang.Object Object. +3 ---------- NONE METH java.lang.StringBuilder StringBuilder. +4 ---------- NONE METH java.lang.StringBuilder StringBuilder.append +6 ---------- NONE METH java.lang.StringBuilder StringBuilder.toString +7 ---------- NONE METH java.lang.Runtime Runtime.getRuntime +8 ---------- NONE METH java.lang.Runtime Runtime.exec +11 ---------- NONE METH java.lang.Process Process.getInputStream +12 ---------- NONE METH java.io.InputStreamReader java.io.InputStreamReader. +13 ---------- NONE METH java.io.BufferedReader java.io.BufferedReader. +14 ---------- NONE METH java.io.BufferedReader java.io.BufferedReader.readLine +15 ---------- NONE METH java.lang.String String.trim EOF RUN @@ -917,92 +917,92 @@ NAME=Java list imports MainActivity.class FILE=bins/java/MainActivity.class CMDS=ii EXPECT=< -12 0x00000037 NONE METH android.os Handler. -15 0x00000037 NONE METH org.radare2.installer MainActivity$2. -16 0x0000004f NONE FIELD org.radare2.installer MainActivity.onLocalRunButtonClick -18 0x00000037 NONE METH org.radare2.installer MainActivity$3. -19 0x0000005c NONE FIELD org.radare2.installer MainActivity.onRemoteRunButtonClick -20 0x00000061 NONE METH android.app Activity.onCreate -23 0x0000006e NONE METH org.radare2.installer MainActivity.setContentView -25 0x00000076 NONE METH org.radare2.installer MainActivity.getApplicationContext -26 0x00000037 NONE METH org.radare2.installer Utils. -29 0x00000088 NONE METH org.radare2.installer MainActivity.findViewById -34 0x0000009d NONE METH org.radare2.installer Utils.GetPref -36 0x000000a5 NONE METH java.lang String.equals -37 0x000000aa NONE METH android.widget CheckBox.setChecked -45 0x000000c8 NONE METH android.widget Button.setOnClickListener -47 0x000000d2 NONE FIELD org.radare2.installer MainActivity.localRunButton -49 0x000000da NONE METH org.radare2.installer Utils.isInternetAvailable -50 0x000000df NONE METH android.preference PreferenceManager.getDefaultSharedPreferences -53 0x00000037 NONE METH org.radare2.installer MainActivity$1. -54 0x00000037 NONE METH java.lang Thread. -55 0x000000f4 NONE METH java.lang Thread.start -58 0x000000ff NONE IMETH android.view Menu.add -59 0x00000104 NONE METH android.app Activity.onCreateOptionsMenu -60 0x00000109 NONE IMETH android.view MenuItem.getItemId -63 0x00000037 NONE METH android.content Intent. -65 0x0000011e NONE METH android.content Intent.setFlags -66 0x00000123 NONE METH org.radare2.installer MainActivity.startActivity -69 0x00000037 NONE METH java.io File. -70 0x00000133 NONE METH java.io File.exists -72 0x00000037 NONE METH org.radare2.installer MainActivity$4. -73 0x00000140 NONE METH android.os Handler.post -76 0x00000037 NONE METH java.io FileInputStream. -77 0x00000037 NONE METH java.util.zip GZIPInputStream. -78 0x00000155 NONE METH java.lang String.lastIndexOf -79 0x0000015a NONE METH java.lang String.substring -82 0x00000037 NONE METH java.lang StringBuilder. -83 0x0000016a NONE METH java.lang StringBuilder.append -85 0x00000172 NONE METH java.lang StringBuilder.toString -87 0x00000037 NONE METH java.io FileOutputStream. -88 0x0000017f NONE METH java.util.zip GZIPInputStream.read -89 0x00000184 NONE METH java.io OutputStream.write -90 0x00000189 NONE METH java.util.zip GZIPInputStream.close -91 0x00000189 NONE METH java.io OutputStream.close -93 0x00000037 NONE METH com.ice.tar TarArchive. -94 0x0000019b NONE METH com.ice.tar TarArchive.extractContents -95 0x000001a0 NONE METH com.ice.tar TarArchive.closeArchive -96 0x000001a5 NONE METH java.io File.delete -98 0x00000037 NONE METH org.radare2.installer MainActivity$5. -100 0x00000037 NONE METH java.net URL. -101 0x000001ba NONE METH java.net URL.openConnection -104 0x000001c5 NONE METH java.net HttpURLConnection.setRequestMethod -105 0x000001ca NONE METH java.net HttpURLConnection.setInstanceFollowRedirects -106 0x000001cf NONE METH java.net HttpURLConnection.getRequestProperties -107 0x000001d4 NONE METH java.net HttpURLConnection.connect -108 0x000001d9 NONE METH java.net HttpURLConnection.getContentLength -110 0x0000016a NONE METH java.lang StringBuilder.append -113 0x000001ec NONE METH java.net HttpURLConnection.getHeaderField -114 0x000001f1 NONE METH org.radare2.installer Utils.StorePref -115 0x000001f6 NONE METH java.net HttpURLConnection.getInputStream -117 0x0000017f NONE METH java.io InputStream.read -118 0x00000184 NONE METH java.io FileOutputStream.write -121 0x0000020e NONE METH org.radare2.installer MainActivity.resetButtons -123 0x00000189 NONE METH java.io FileOutputStream.close -124 0x00000189 NONE METH java.io InputStream.close -125 0x00000220 NONE METH java.net HttpURLConnection.disconnect -127 0x00000228 NONE METH java.lang Exception.printStackTrace -128 0x0000022d NONE METH android.app Activity.onResume -131 0x00000238 NONE IMETH android.content SharedPreferences.getString -132 0x0000023d NONE METH java.lang Integer.parseInt -134 0x00000245 NONE IMETH android.content SharedPreferences.getBoolean -137 0x00000250 NONE METH org.radare2.installer MainActivity.getSystemService -140 0x0000025b NONE METH android.app PendingIntent.getService -141 0x00000260 NONE METH android.app AlarmManager.cancel -142 0x00000265 NONE METH android.os SystemClock.elapsedRealtime -143 0x0000026a NONE METH android.app AlarmManager.setInexactRepeating +nth vaddr bind type lib name +-------------------------------------------------------------------------------------------------------------------------------- +1 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.download +2 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.handler +3 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.thread +4 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.outputView +5 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.remoteRunButton +6 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.checkForRadare +7 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.http_url_default +8 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.output +9 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.mUtils +10 ---------- NONE METH android.app.Activity android.app.Activity. +12 ---------- NONE METH android.os.Handler android.os.Handler. +15 ---------- NONE METH org.radare2.installer.MainActivity$2 org.radare2.installer.MainActivity$2. +16 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.onLocalRunButtonClick +18 ---------- NONE METH org.radare2.installer.MainActivity$3 org.radare2.installer.MainActivity$3. +19 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.onRemoteRunButtonClick +20 ---------- NONE METH android.app.Activity android.app.Activity.onCreate +23 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.setContentView +25 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.getApplicationContext +26 ---------- NONE METH org.radare2.installer.Utils org.radare2.installer.Utils. +29 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.findViewById +34 ---------- NONE METH org.radare2.installer.Utils org.radare2.installer.Utils.GetPref +36 ---------- NONE METH java.lang.String String.equals +37 ---------- NONE METH android.widget.CheckBox android.widget.CheckBox.setChecked +45 ---------- NONE METH android.widget.Button android.widget.Button.setOnClickListener +47 ---------- NONE FIELD org.radare2.installer.MainActivity org.radare2.installer.MainActivity.localRunButton +49 ---------- NONE METH org.radare2.installer.Utils org.radare2.installer.Utils.isInternetAvailable +50 ---------- NONE METH android.preference.PreferenceManager android.preference.PreferenceManager.getDefaultSharedPreferences +53 ---------- NONE METH org.radare2.installer.MainActivity$1 org.radare2.installer.MainActivity$1. +54 ---------- NONE METH java.lang.Thread Thread. +55 ---------- NONE METH java.lang.Thread Thread.start +58 ---------- NONE IMETH android.view.Menu android.view.Menu.add +59 ---------- NONE METH android.app.Activity android.app.Activity.onCreateOptionsMenu +60 ---------- NONE IMETH android.view.MenuItem android.view.MenuItem.getItemId +63 ---------- NONE METH android.content.Intent android.content.Intent. +65 ---------- NONE METH android.content.Intent android.content.Intent.setFlags +66 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.startActivity +69 ---------- NONE METH java.io.File java.io.File. +70 ---------- NONE METH java.io.File java.io.File.exists +72 ---------- NONE METH org.radare2.installer.MainActivity$4 org.radare2.installer.MainActivity$4. +73 ---------- NONE METH android.os.Handler android.os.Handler.post +76 ---------- NONE METH java.io.FileInputStream java.io.FileInputStream. +77 ---------- NONE METH java.util.zip.GZIPInputStream java.util.zip.GZIPInputStream. +78 ---------- NONE METH java.lang.String String.lastIndexOf +79 ---------- NONE METH java.lang.String String.substring +82 ---------- NONE METH java.lang.StringBuilder StringBuilder. +83 ---------- NONE METH java.lang.StringBuilder StringBuilder.append +85 ---------- NONE METH java.lang.StringBuilder StringBuilder.toString +87 ---------- NONE METH java.io.FileOutputStream java.io.FileOutputStream. +88 ---------- NONE METH java.util.zip.GZIPInputStream java.util.zip.GZIPInputStream.read +89 ---------- NONE METH java.io.OutputStream java.io.OutputStream.write +90 ---------- NONE METH java.util.zip.GZIPInputStream java.util.zip.GZIPInputStream.close +91 ---------- NONE METH java.io.OutputStream java.io.OutputStream.close +93 ---------- NONE METH com.ice.tar.TarArchive com.ice.tar.TarArchive. +94 ---------- NONE METH com.ice.tar.TarArchive com.ice.tar.TarArchive.extractContents +95 ---------- NONE METH com.ice.tar.TarArchive com.ice.tar.TarArchive.closeArchive +96 ---------- NONE METH java.io.File java.io.File.delete +98 ---------- NONE METH org.radare2.installer.MainActivity$5 org.radare2.installer.MainActivity$5. +100 ---------- NONE METH java.net.URL java.net.URL. +101 ---------- NONE METH java.net.URL java.net.URL.openConnection +104 ---------- NONE METH java.net.HttpURLConnection java.net.HttpURLConnection.setRequestMethod +105 ---------- NONE METH java.net.HttpURLConnection java.net.HttpURLConnection.setInstanceFollowRedirects +106 ---------- NONE METH java.net.HttpURLConnection java.net.HttpURLConnection.getRequestProperties +107 ---------- NONE METH java.net.HttpURLConnection java.net.HttpURLConnection.connect +108 ---------- NONE METH java.net.HttpURLConnection java.net.HttpURLConnection.getContentLength +110 ---------- NONE METH java.lang.StringBuilder StringBuilder.append +113 ---------- NONE METH java.net.HttpURLConnection java.net.HttpURLConnection.getHeaderField +114 ---------- NONE METH org.radare2.installer.Utils org.radare2.installer.Utils.StorePref +115 ---------- NONE METH java.net.HttpURLConnection java.net.HttpURLConnection.getInputStream +117 ---------- NONE METH java.io.InputStream java.io.InputStream.read +118 ---------- NONE METH java.io.FileOutputStream java.io.FileOutputStream.write +121 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.resetButtons +123 ---------- NONE METH java.io.FileOutputStream java.io.FileOutputStream.close +124 ---------- NONE METH java.io.InputStream java.io.InputStream.close +125 ---------- NONE METH java.net.HttpURLConnection java.net.HttpURLConnection.disconnect +127 ---------- NONE METH java.lang.Exception Exception.printStackTrace +128 ---------- NONE METH android.app.Activity android.app.Activity.onResume +131 ---------- NONE IMETH android.content.SharedPreferences android.content.SharedPreferences.getString +132 ---------- NONE METH java.lang.Integer Integer.parseInt +134 ---------- NONE IMETH android.content.SharedPreferences android.content.SharedPreferences.getBoolean +137 ---------- NONE METH org.radare2.installer.MainActivity org.radare2.installer.MainActivity.getSystemService +140 ---------- NONE METH android.app.PendingIntent android.app.PendingIntent.getService +141 ---------- NONE METH android.app.AlarmManager android.app.AlarmManager.cancel +142 ---------- NONE METH android.os.SystemClock android.os.SystemClock.elapsedRealtime +143 ---------- NONE METH android.app.AlarmManager android.app.AlarmManager.setInexactRepeating EOF RUN @@ -1011,21 +1011,21 @@ NAME=Java list imports Main.class FILE=bins/java/Main.class CMDS=ii EXPECT=< -2 0x0000000f NONE FIELD java.lang System.out -4 0x00000017 NONE METH java.io PrintStream.println -8 0x0000000a NONE METH java.io FileReader. -9 0x0000000a NONE METH java.io BufferedReader. -10 0x0000002f NONE METH java.io BufferedReader.readLine -12 0x0000000a NONE METH java.lang StringBuilder. -14 0x0000003f NONE METH java.lang StringBuilder.append -15 0x00000044 NONE METH java.lang StringBuilder.toString -16 0x00000049 NONE METH java.io BufferedReader.close -18 0x00000051 NONE FIELD java.lang System.err -21 0x0000005c NONE METH java.io PrintStream.format -22 0x00000061 NONE METH java.lang Exception.printStackTrace +nth vaddr bind type lib name +---------------------------------------------------------------------------------- +1 ---------- NONE METH java.lang.Object Object. +2 ---------- NONE FIELD java.lang.System System.out +4 ---------- NONE METH java.io.PrintStream java.io.PrintStream.println +8 ---------- NONE METH java.io.FileReader java.io.FileReader. +9 ---------- NONE METH java.io.BufferedReader java.io.BufferedReader. +10 ---------- NONE METH java.io.BufferedReader java.io.BufferedReader.readLine +12 ---------- NONE METH java.lang.StringBuilder StringBuilder. +14 ---------- NONE METH java.lang.StringBuilder StringBuilder.append +15 ---------- NONE METH java.lang.StringBuilder StringBuilder.toString +16 ---------- NONE METH java.io.BufferedReader java.io.BufferedReader.close +18 ---------- NONE FIELD java.lang.System System.err +21 ---------- NONE METH java.io.PrintStream java.io.PrintStream.format +22 ---------- NONE METH java.lang.Exception Exception.printStackTrace EOF RUN @@ -1044,30 +1044,30 @@ NAME=Java list imports test.class FILE=bins/java/test.class CMDS=ii EXPECT=< -17 0x000000ef NONE METH test.$getCallSiteArray -22 0x0000009c NONE METH groovy.lang Script. -35 0x0000022b NONE IMETH org.codehaus.groovy.runtime.callsite CallSite.call -55 0x00000317 NONE IMETH org.codehaus.groovy.runtime.callsite CallSite.callConstructor -61 0x0000038b NONE METH org.codehaus.groovy.runtime ScriptBytecodeAdapter.createMap -67 0x0000022b NONE IMETH org.codehaus.groovy.runtime.callsite CallSite.call -71 0x00000402 NONE IMETH org.codehaus.groovy.runtime.callsite CallSite.callCurrent -79 0x00000459 NONE IMETH org.codehaus.groovy.runtime.callsite CallSite.callGetProperty -92 0x0000022b NONE IMETH org.codehaus.groovy.runtime.callsite CallSite.call -100 0x0000052d NONE METH java.lang Object.getClass -104 0x00000575 NONE METH org.codehaus.groovy.runtime ScriptBytecodeAdapter.initMetaClass -106 0x0000057f NONE FIELD test.$staticClassInfo -112 0x00000606 NONE METH org.codehaus.groovy.reflection ClassInfo.getClassInfo -115 0x0000061f NONE METH org.codehaus.groovy.reflection ClassInfo.getMetaClass -147 0x00000767 NONE METH test.$createCallSiteArray_1 -152 0x0000009c NONE METH org.codehaus.groovy.runtime.callsite CallSiteArray. -154 0x000007dd NONE FIELD test.$callSiteArray -159 0x0000080e NONE METH java.lang.ref SoftReference.get -161 0x00000818 NONE METH test.$createCallSiteArray -164 0x0000009c NONE METH java.lang.ref SoftReference. -168 0x0000087f NONE FIELD org.codehaus.groovy.runtime.callsite CallSiteArray.array +nth vaddr bind type lib name +--------------------------------------------------------------------------------------------------------------------------------------------- +13 ---------- NONE METH groovy.lang.Script groovy.lang.Script. +17 ---------- NONE METH test test.$getCallSiteArray +22 ---------- NONE METH groovy.lang.Script groovy.lang.Script. +35 ---------- NONE IMETH org.codehaus.groovy.runtime.callsite.CallSite org.codehaus.groovy.runtime.callsite.CallSite.call +55 ---------- NONE IMETH org.codehaus.groovy.runtime.callsite.CallSite org.codehaus.groovy.runtime.callsite.CallSite.callConstructor +61 ---------- NONE METH org.codehaus.groovy.runtime.ScriptBytecodeAdapter org.codehaus.groovy.runtime.ScriptBytecodeAdapter.createMap +67 ---------- NONE IMETH org.codehaus.groovy.runtime.callsite.CallSite org.codehaus.groovy.runtime.callsite.CallSite.call +71 ---------- NONE IMETH org.codehaus.groovy.runtime.callsite.CallSite org.codehaus.groovy.runtime.callsite.CallSite.callCurrent +79 ---------- NONE IMETH org.codehaus.groovy.runtime.callsite.CallSite org.codehaus.groovy.runtime.callsite.CallSite.callGetProperty +92 ---------- NONE IMETH org.codehaus.groovy.runtime.callsite.CallSite org.codehaus.groovy.runtime.callsite.CallSite.call +100 ---------- NONE METH java.lang.Object Object.getClass +104 ---------- NONE METH org.codehaus.groovy.runtime.ScriptBytecodeAdapter org.codehaus.groovy.runtime.ScriptBytecodeAdapter.initMetaClass +106 ---------- NONE FIELD test test.$staticClassInfo +112 ---------- NONE METH org.codehaus.groovy.reflection.ClassInfo org.codehaus.groovy.reflection.ClassInfo.getClassInfo +115 ---------- NONE METH org.codehaus.groovy.reflection.ClassInfo org.codehaus.groovy.reflection.ClassInfo.getMetaClass +147 ---------- NONE METH test test.$createCallSiteArray_1 +152 ---------- NONE METH org.codehaus.groovy.runtime.callsite.CallSiteArray org.codehaus.groovy.runtime.callsite.CallSiteArray. +154 ---------- NONE FIELD test test.$callSiteArray +159 ---------- NONE METH java.lang.ref.SoftReference java.lang.ref.SoftReference.get +161 ---------- NONE METH test test.$createCallSiteArray +164 ---------- NONE METH java.lang.ref.SoftReference java.lang.ref.SoftReference. +168 ---------- NONE FIELD org.codehaus.groovy.runtime.callsite.CallSiteArray org.codehaus.groovy.runtime.callsite.CallSiteArray.array EOF RUN @@ -1076,29 +1076,29 @@ NAME=Java list imports TryWithResources.class FILE=bins/java/TryWithResources.class CMDS=ii EXPECT=< -3 0x0000000d NONE METH java.lang RuntimeException. -4 0x00000017 NONE FIELD java.lang System.out -6 0x0000000d NONE METH java.lang StringBuilder. -8 0x00000027 NONE METH java.lang StringBuilder.append -9 0x00000027 NONE METH java.lang StringBuilder.append -10 0x00000031 NONE METH java.lang StringBuilder.toString -11 0x00000036 NONE METH java.io PrintStream.println -12 0x0000003b NONE FIELD TryWithResources.i -14 0x00000036 NONE METH java.io PrintStream.println -15 0x00000048 NONE FIELD TryWithResources.$ -17 0x00000050 GLOBAL FUNC TryWithResources.main -19 0x00000048 NONE METH TryWithResources.$ -20 0x00000036 NONE METH java.io PrintStream.println -21 0x00000048 NONE METH TryWithResources.$ -22 0x00000067 NONE METH TryWithResources.close -24 0x0000006f NONE METH java.lang Throwable.addSuppressed -25 0x00000048 NONE METH TryWithResources.$ -26 0x00000067 NONE IMETH java.lang AutoCloseable.close -27 0x0000007e NONE METH java.lang Throwable.printStackTrace -0 ---------- WEAK IFACE java/lang/AutoCloseable.* +nth vaddr bind type lib name +------------------------------------------------------------------------------------- +2 ---------- NONE METH TryWithResources TryWithResources. +3 ---------- NONE METH java.lang.RuntimeException RuntimeException. +4 ---------- NONE FIELD java.lang.System System.out +6 ---------- NONE METH java.lang.StringBuilder StringBuilder. +8 ---------- NONE METH java.lang.StringBuilder StringBuilder.append +9 ---------- NONE METH java.lang.StringBuilder StringBuilder.append +10 ---------- NONE METH java.lang.StringBuilder StringBuilder.toString +11 ---------- NONE METH java.io.PrintStream java.io.PrintStream.println +12 ---------- NONE FIELD TryWithResources TryWithResources.i +14 ---------- NONE METH java.io.PrintStream java.io.PrintStream.println +15 ---------- NONE FIELD TryWithResources TryWithResources.$ +17 ---------- GLOBAL FUNC TryWithResources TryWithResources.main +19 ---------- NONE METH TryWithResources TryWithResources.$ +20 ---------- NONE METH java.io.PrintStream java.io.PrintStream.println +21 ---------- NONE METH TryWithResources TryWithResources.$ +22 ---------- NONE METH TryWithResources TryWithResources.close +24 ---------- NONE METH java.lang.Throwable Throwable.addSuppressed +25 ---------- NONE METH TryWithResources TryWithResources.$ +26 ---------- NONE IMETH java.lang.AutoCloseable java.lang.AutoCloseable.close +27 ---------- NONE METH java.lang.Throwable Throwable.printStackTrace +0 ---------- WEAK IFACE java.lang.AutoCloseable java.lang.AutoCloseable.* EOF RUN diff --git a/test/db/formats/mach0/arm64e b/test/db/formats/mach0/arm64e index fffb282acf..2f272e3a96 100644 --- a/test/db/formats/mach0/arm64e +++ b/test/db/formats/mach0/arm64e @@ -117,7 +117,7 @@ address index class flags name 0x100003aa0 5 Test c someStaticMethod address index class flags name type ------------------------------------------------------------------------ -0x00000000 0 Test isa struct objc_class * +---------- 0 Test isa struct objc_class * 0x1000080f0 1 Test Test::(ivar)someField i EOF RUN @@ -149,7 +149,7 @@ address index class flags name 0x100003a70 5 Test c someStaticMethod address index class flags name type ------------------------------------------------------------------------ -0x00000000 0 Test isa struct objc_class * +---------- 0 Test isa struct objc_class * 0x1000080f0 1 Test Test::(ivar)someField i EOF RUN diff --git a/test/db/formats/mach0/fatmach0 b/test/db/formats/mach0/fatmach0 index a0fb7b29b4..7178376f40 100644 --- a/test/db/formats/mach0/fatmach0 +++ b/test/db/formats/mach0/fatmach0 @@ -266,11 +266,11 @@ address index class flags name 0x100001e90 0 ViewController viewDidLoad address index class flags name type -------------------------------------------------------------------------------- -0x00000000 0 AppDelegate AppDelegate::(property)window -0x00000000 1 AppDelegate AppDelegate::(property)hash -0x00000000 2 AppDelegate AppDelegate::(property)superclass -0x00000000 3 AppDelegate AppDelegate::(property)description -0x00000000 4 AppDelegate AppDelegate::(property)debugDescription +---------- 0 AppDelegate AppDelegate::(property)window +---------- 1 AppDelegate AppDelegate::(property)hash +---------- 2 AppDelegate AppDelegate::(property)superclass +---------- 3 AppDelegate AppDelegate::(property)description +---------- 4 AppDelegate AppDelegate::(property)debugDescription address index class flags name ------------------------------------------------------------------------------------------------ 0x100001ee4 0 AppDelegate application:didFinishLaunchingWithOptions: @@ -278,13 +278,13 @@ address index class flags name 0x1000020a4 2 AppDelegate application:didDiscardSceneSessions: address index class flags name type ---------------------------------------------------------------------------------------------------- -0x00000000 0 SceneDelegate isa struct objc_class * +---------- 0 SceneDelegate isa struct objc_class * 0x100009268 1 SceneDelegate SceneDelegate::(ivar)_window @"UIWindow" -0x00000000 2 SceneDelegate SceneDelegate::(property)window -0x00000000 3 SceneDelegate SceneDelegate::(property)hash -0x00000000 4 SceneDelegate SceneDelegate::(property)superclass -0x00000000 5 SceneDelegate SceneDelegate::(property)description -0x00000000 6 SceneDelegate SceneDelegate::(property)debugDescription +---------- 2 SceneDelegate SceneDelegate::(property)window +---------- 3 SceneDelegate SceneDelegate::(property)hash +---------- 4 SceneDelegate SceneDelegate::(property)superclass +---------- 5 SceneDelegate SceneDelegate::(property)description +---------- 6 SceneDelegate SceneDelegate::(property)debugDescription address index class flags name -------------------------------------------------------------------------- 0x1000021d0 0 SceneDelegate scene:willConnectToSession:options: diff --git a/test/db/formats/mach0/objc b/test/db/formats/mach0/objc index a9c12d6d84..039c7cf160 100644 --- a/test/db/formats/mach0/objc +++ b/test/db/formats/mach0/objc @@ -11,9 +11,9 @@ address min max name super 0x100001180 0x100000da0 0x100000e20 Person NSObject address index class flags name type -------------------------------------------------------------------------- -0x00000000 0 Person isa struct objc_class * +---------- 0 Person isa struct objc_class * 0x100001178 1 Person Person::(ivar)name * -0x00000000 2 Person Person::(property)name +---------- 2 Person Person::(property)name address index class flags name ---------------------------------------- 0x100000da0 0 Person sayHello diff --git a/test/db/tools/rz_bin b/test/db/tools/rz_bin index a913ac48fb..bb90bef0e3 100644 --- a/test/db/tools/rz_bin +++ b/test/db/tools/rz_bin @@ -836,9 +836,9 @@ FILE=bins/java/test.class CMDS=!rz-bin -c ${RZ_FILE} EXPECT=< - java.lang.Object Ljava/lang/Object; - java.io.FileReader Ljava/io/FileReader; - java.io.BufferedReader Ljava/io/BufferedReader; - Main LMain; LMain;. - Main LMain; LMain;.main -+java.lang.StringBuilder Ljava/lang/StringBuilder; append - java.io.BufferedReader Ljava/io/BufferedReader; close - java.lang.System Ljava/lang/System; err - java.io.PrintStream Ljava/io/PrintStream; format --java.lang.invoke.StringConcatFactory Ljava/lang/invoke/StringConcatFactory; makeConcatWithConstants - java.lang.System Ljava/lang/System; out - java.lang.Exception Ljava/lang/Exception; printStackTrace - java.io.PrintStream Ljava/io/PrintStream; println - java.io.BufferedReader Ljava/io/BufferedReader; readLine -+java.lang.StringBuilder Ljava/lang/StringBuilder; toString +@@ -2,6 +2,9 @@ + Main Main Main. + Main Main Main.main + java.lang.Object Object Object. ++java.lang.StringBuilder StringBuilder StringBuilder. ++java.lang.StringBuilder StringBuilder StringBuilder.append ++java.lang.StringBuilder StringBuilder StringBuilder.toString + java.lang.System System System.err + java.lang.System System System.out + java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader. +@@ -10,4 +13,3 @@ + java.io.FileReader java.io.FileReader java.io.FileReader. + java.io.PrintStream java.io.PrintStream java.io.PrintStream.format + java.io.PrintStream java.io.PrintStream java.io.PrintStream.println +-java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory.makeConcatWithConstants EOF RUN @@ -603,7 +669,7 @@ NAME=rz-diff symbols comparison JSON FILE== CMDS=!rz-diff -C -jt symbols bins/java/Main.java.11.class bins/java/Main.java.1.7.class EXPECT=<\n"},{"op":"equal","value":"java.lang.Object Ljava/lang/Object; \n"},{"op":"equal","value":"java.io.FileReader Ljava/io/FileReader; \n"},{"op":"equal","value":"java.io.BufferedReader Ljava/io/BufferedReader; \n"},{"op":"equal","value":"Main LMain; LMain;.\n"},{"op":"equal","value":"Main LMain; LMain;.main\n"},{"op":"insert","value":"java.lang.StringBuilder Ljava/lang/StringBuilder; append\n"},{"op":"equal","value":"java.io.BufferedReader Ljava/io/BufferedReader; close\n"},{"op":"equal","value":"java.lang.System Ljava/lang/System; err\n"},{"op":"equal","value":"java.io.PrintStream Ljava/io/PrintStream; format\n"},{"op":"delete","value":"java.lang.invoke.StringConcatFactory Ljava/lang/invoke/StringConcatFactory; makeConcatWithConstants\n"},{"op":"equal","value":"java.lang.System Ljava/lang/System; out\n"},{"op":"equal","value":"java.lang.Exception Ljava/lang/Exception; printStackTrace\n"},{"op":"equal","value":"java.io.PrintStream Ljava/io/PrintStream; println\n"},{"op":"equal","value":"java.io.BufferedReader Ljava/io/BufferedReader; readLine\n"},{"op":"insert","value":"java.lang.StringBuilder Ljava/lang/StringBuilder; toString\n"}]}]} +{"from":"bins/java/Main.java.11.class","to":"bins/java/Main.java.1.7.class","diff":[{"from":[2,6],"to":[2,9],"ops":[{"op":"equal","value":"Main Main Main.\n"},{"op":"equal","value":"Main Main Main.main\n"},{"op":"equal","value":"java.lang.Object Object Object.\n"},{"op":"insert","value":"java.lang.StringBuilder StringBuilder StringBuilder.\n"},{"op":"insert","value":"java.lang.StringBuilder StringBuilder StringBuilder.append\n"},{"op":"insert","value":"java.lang.StringBuilder StringBuilder StringBuilder.toString\n"},{"op":"equal","value":"java.lang.System System System.err\n"},{"op":"equal","value":"java.lang.System System System.out\n"},{"op":"equal","value":"java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.\n"}]},{"from":[10,4],"to":[13,3],"ops":[{"op":"equal","value":"java.io.FileReader java.io.FileReader java.io.FileReader.\n"},{"op":"equal","value":"java.io.PrintStream java.io.PrintStream java.io.PrintStream.format\n"},{"op":"equal","value":"java.io.PrintStream java.io.PrintStream java.io.PrintStream.println\n"},{"op":"delete","value":"java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory.makeConcatWithConstants\n"}]}]} EOF RUN @@ -614,28 +680,28 @@ EXPECT=< - virt: 0x0000000000000114 phys: 0x0000000000000114 java.io.FileReader Ljava/io/FileReader; - virt: 0x000000000000011e phys: 0x000000000000011e java.io.BufferedReader Ljava/io/BufferedReader; --virt: 0x00000000000004a4 phys: 0x00000000000004a4 Main LMain; LMain;. --virt: 0x00000000000004cf phys: 0x00000000000004cf Main LMain; LMain;.main --virt: 0x00000000000001b7 phys: 0x00000000000001b7 java.io.BufferedReader Ljava/io/BufferedReader; close --virt: 0x00000000000001e2 phys: 0x00000000000001e2 java.lang.System Ljava/lang/System; err --virt: 0x000000000000021f phys: 0x000000000000021f java.io.PrintStream Ljava/io/PrintStream; format --virt: 0x000000000000033f phys: 0x000000000000033f java.lang.invoke.StringConcatFactory Ljava/lang/invoke/StringConcatFactory; makeConcatWithConstants -+virt: 0x0000000000000187 phys: 0x0000000000000187 java.lang.StringBuilder Ljava/lang/StringBuilder; -+virt: 0x0000000000000383 phys: 0x0000000000000383 Main LMain; LMain;. -+virt: 0x00000000000003ae phys: 0x00000000000003ae Main LMain; LMain;.main -+virt: 0x0000000000000198 phys: 0x0000000000000198 java.lang.StringBuilder Ljava/lang/StringBuilder; append -+virt: 0x00000000000001f0 phys: 0x00000000000001f0 java.io.BufferedReader Ljava/io/BufferedReader; close -+virt: 0x000000000000021b phys: 0x000000000000021b java.lang.System Ljava/lang/System; err -+virt: 0x0000000000000258 phys: 0x0000000000000258 java.io.PrintStream Ljava/io/PrintStream; format - virt: 0x0000000000000039 phys: 0x0000000000000039 java.lang.System Ljava/lang/System; out --virt: 0x0000000000000271 phys: 0x0000000000000271 java.lang.Exception Ljava/lang/Exception; printStackTrace -+virt: 0x00000000000002aa phys: 0x00000000000002aa java.lang.Exception Ljava/lang/Exception; printStackTrace - virt: 0x0000000000000088 phys: 0x0000000000000088 java.io.PrintStream Ljava/io/PrintStream; println - virt: 0x000000000000013e phys: 0x000000000000013e java.io.BufferedReader Ljava/io/BufferedReader; readLine -+virt: 0x00000000000001db phys: 0x00000000000001db java.lang.StringBuilder Ljava/lang/StringBuilder; toString +-virt: 0x0000000000000271 phys: 0x0000000000000271 java.lang.Exception Exception Exception.printStackTrace +-virt: 0x00000000000004a4 phys: 0x00000000000004a4 Main Main Main. +-virt: 0x00000000000004cf phys: 0x00000000000004cf Main Main Main.main ++virt: 0x00000000000002aa phys: 0x00000000000002aa java.lang.Exception Exception Exception.printStackTrace ++virt: 0x0000000000000383 phys: 0x0000000000000383 Main Main Main. ++virt: 0x00000000000003ae phys: 0x00000000000003ae Main Main Main.main + virt: 0x000000000000000a phys: 0x000000000000000a java.lang.Object Object Object. +-virt: 0x00000000000001e2 phys: 0x00000000000001e2 java.lang.System System System.err ++virt: 0x0000000000000187 phys: 0x0000000000000187 java.lang.StringBuilder StringBuilder StringBuilder. ++virt: 0x0000000000000198 phys: 0x0000000000000198 java.lang.StringBuilder StringBuilder StringBuilder.append ++virt: 0x00000000000001db phys: 0x00000000000001db java.lang.StringBuilder StringBuilder StringBuilder.toString ++virt: 0x000000000000021b phys: 0x000000000000021b java.lang.System System System.err + virt: 0x0000000000000039 phys: 0x0000000000000039 java.lang.System System System.out + virt: 0x000000000000011e phys: 0x000000000000011e java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader. +-virt: 0x00000000000001b7 phys: 0x00000000000001b7 java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.close ++virt: 0x00000000000001f0 phys: 0x00000000000001f0 java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.close + virt: 0x000000000000013e phys: 0x000000000000013e java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.readLine + virt: 0x0000000000000114 phys: 0x0000000000000114 java.io.FileReader java.io.FileReader java.io.FileReader. +-virt: 0x000000000000021f phys: 0x000000000000021f java.io.PrintStream java.io.PrintStream java.io.PrintStream.format ++virt: 0x0000000000000258 phys: 0x0000000000000258 java.io.PrintStream java.io.PrintStream java.io.PrintStream.format + virt: 0x0000000000000088 phys: 0x0000000000000088 java.io.PrintStream java.io.PrintStream java.io.PrintStream.println +-virt: 0x000000000000033f phys: 0x000000000000033f java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory.makeConcatWithConstants EOF RUN @@ -644,7 +710,7 @@ NAME=rz-diff symbols comparison with addresses JSON FILE== CMDS=!rz-diff -C -Ajt symbols bins/java/Main.java.11.class bins/java/Main.java.1.7.class EXPECT=<\n"},{"op":"equal","value":"virt: 0x0000000000000114 phys: 0x0000000000000114 java.io.FileReader Ljava/io/FileReader; \n"},{"op":"equal","value":"virt: 0x000000000000011e phys: 0x000000000000011e java.io.BufferedReader Ljava/io/BufferedReader; \n"},{"op":"delete","value":"virt: 0x00000000000004a4 phys: 0x00000000000004a4 Main LMain; LMain;.\n"},{"op":"delete","value":"virt: 0x00000000000004cf phys: 0x00000000000004cf Main LMain; LMain;.main\n"},{"op":"delete","value":"virt: 0x00000000000001b7 phys: 0x00000000000001b7 java.io.BufferedReader Ljava/io/BufferedReader; close\n"},{"op":"delete","value":"virt: 0x00000000000001e2 phys: 0x00000000000001e2 java.lang.System Ljava/lang/System; err\n"},{"op":"delete","value":"virt: 0x000000000000021f phys: 0x000000000000021f java.io.PrintStream Ljava/io/PrintStream; format\n"},{"op":"delete","value":"virt: 0x000000000000033f phys: 0x000000000000033f java.lang.invoke.StringConcatFactory Ljava/lang/invoke/StringConcatFactory; makeConcatWithConstants\n"},{"op":"insert","value":"virt: 0x0000000000000187 phys: 0x0000000000000187 java.lang.StringBuilder Ljava/lang/StringBuilder; \n"},{"op":"insert","value":"virt: 0x0000000000000383 phys: 0x0000000000000383 Main LMain; LMain;.\n"},{"op":"insert","value":"virt: 0x00000000000003ae phys: 0x00000000000003ae Main LMain; LMain;.main\n"},{"op":"insert","value":"virt: 0x0000000000000198 phys: 0x0000000000000198 java.lang.StringBuilder Ljava/lang/StringBuilder; append\n"},{"op":"insert","value":"virt: 0x00000000000001f0 phys: 0x00000000000001f0 java.io.BufferedReader Ljava/io/BufferedReader; close\n"},{"op":"insert","value":"virt: 0x000000000000021b phys: 0x000000000000021b java.lang.System Ljava/lang/System; err\n"},{"op":"insert","value":"virt: 0x0000000000000258 phys: 0x0000000000000258 java.io.PrintStream Ljava/io/PrintStream; format\n"},{"op":"equal","value":"virt: 0x0000000000000039 phys: 0x0000000000000039 java.lang.System Ljava/lang/System; out\n"},{"op":"delete","value":"virt: 0x0000000000000271 phys: 0x0000000000000271 java.lang.Exception Ljava/lang/Exception; printStackTrace\n"},{"op":"insert","value":"virt: 0x00000000000002aa phys: 0x00000000000002aa java.lang.Exception Ljava/lang/Exception; printStackTrace\n"},{"op":"equal","value":"virt: 0x0000000000000088 phys: 0x0000000000000088 java.io.PrintStream Ljava/io/PrintStream; println\n"},{"op":"equal","value":"virt: 0x000000000000013e phys: 0x000000000000013e java.io.BufferedReader Ljava/io/BufferedReader; readLine\n"},{"op":"insert","value":"virt: 0x00000000000001db phys: 0x00000000000001db java.lang.StringBuilder Ljava/lang/StringBuilder; toString\n"}]}]} +{"from":"bins/java/Main.java.11.class","to":"bins/java/Main.java.1.7.class","diff":[{"from":[1,13],"to":[1,15],"ops":[{"op":"delete","value":"virt: 0x0000000000000271 phys: 0x0000000000000271 java.lang.Exception Exception Exception.printStackTrace\n"},{"op":"delete","value":"virt: 0x00000000000004a4 phys: 0x00000000000004a4 Main Main Main.\n"},{"op":"delete","value":"virt: 0x00000000000004cf phys: 0x00000000000004cf Main Main Main.main\n"},{"op":"insert","value":"virt: 0x00000000000002aa phys: 0x00000000000002aa java.lang.Exception Exception Exception.printStackTrace\n"},{"op":"insert","value":"virt: 0x0000000000000383 phys: 0x0000000000000383 Main Main Main.\n"},{"op":"insert","value":"virt: 0x00000000000003ae phys: 0x00000000000003ae Main Main Main.main\n"},{"op":"equal","value":"virt: 0x000000000000000a phys: 0x000000000000000a java.lang.Object Object Object.\n"},{"op":"delete","value":"virt: 0x00000000000001e2 phys: 0x00000000000001e2 java.lang.System System System.err\n"},{"op":"insert","value":"virt: 0x0000000000000187 phys: 0x0000000000000187 java.lang.StringBuilder StringBuilder StringBuilder.\n"},{"op":"insert","value":"virt: 0x0000000000000198 phys: 0x0000000000000198 java.lang.StringBuilder StringBuilder StringBuilder.append\n"},{"op":"insert","value":"virt: 0x00000000000001db phys: 0x00000000000001db java.lang.StringBuilder StringBuilder StringBuilder.toString\n"},{"op":"insert","value":"virt: 0x000000000000021b phys: 0x000000000000021b java.lang.System System System.err\n"},{"op":"equal","value":"virt: 0x0000000000000039 phys: 0x0000000000000039 java.lang.System System System.out\n"},{"op":"equal","value":"virt: 0x000000000000011e phys: 0x000000000000011e java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.\n"},{"op":"delete","value":"virt: 0x00000000000001b7 phys: 0x00000000000001b7 java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.close\n"},{"op":"insert","value":"virt: 0x00000000000001f0 phys: 0x00000000000001f0 java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.close\n"},{"op":"equal","value":"virt: 0x000000000000013e phys: 0x000000000000013e java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.readLine\n"},{"op":"equal","value":"virt: 0x0000000000000114 phys: 0x0000000000000114 java.io.FileReader java.io.FileReader java.io.FileReader.\n"},{"op":"delete","value":"virt: 0x000000000000021f phys: 0x000000000000021f java.io.PrintStream java.io.PrintStream java.io.PrintStream.format\n"},{"op":"insert","value":"virt: 0x0000000000000258 phys: 0x0000000000000258 java.io.PrintStream java.io.PrintStream java.io.PrintStream.format\n"},{"op":"equal","value":"virt: 0x0000000000000088 phys: 0x0000000000000088 java.io.PrintStream java.io.PrintStream java.io.PrintStream.println\n"},{"op":"delete","value":"virt: 0x000000000000033f phys: 0x000000000000033f java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory.makeConcatWithConstants\n"}]}]} EOF RUN @@ -668,7 +734,7 @@ EXPECT=<