diff --git a/libr/anal/p/anal_java.c b/libr/anal/p/anal_java.c index 29889d3860..a278298b80 100644 --- a/libr/anal/p/anal_java.c +++ b/libr/anal/p/anal_java.c @@ -169,6 +169,9 @@ static int java_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len case 0x6f: // ddiv op->type = R_ANAL_OP_TYPE_DIV; break; + default: + op->type = R_ANAL_OP_TYPE_UNK; + break; } return sz; } diff --git a/libr/bin/p/bin_java.c b/libr/bin/p/bin_java.c index e15c809e36..b92f58ac29 100644 --- a/libr/bin/p/bin_java.c +++ b/libr/bin/p/bin_java.c @@ -75,20 +75,7 @@ static int check(RBinArch *arch) { ut16 major = (arch->buf->buf[8]<<8) | arch->buf->buf[7]; memcpy (&off, arch->buf->buf+4*sizeof(int), sizeof(int)); r_mem_copyendian ((ut8*)&off, (ut8*)&off, sizeof(int), !LIL_ENDIAN); - if (major>=45 && major<=55) - ret = R_TRUE; - // TODO: in case of failed trick attempt discard on known mach0 headers? -#if 0 - /* KNOWN MACH0 HEADERS TO DISCARD */ - if (off > 0 && off+5 < arch->buf->length) { - const ut8 * pbuf = arch->buf->buf+off; - if ( !memcmp (pbuf, "\xce\xfa\xed\xfe", 4) || - !memcmp (pbuf, "\xfe\xed\xfa\xce", 4) || - !memcmp (pbuf, "\xfe\xed\xfa\xcf", 4) || - !memcmp (pbuf, "\xcf\xfa\xed\xfe", 4)) - ret = R_FALSE; - } -#endif + ret = R_TRUE; } return ret; } @@ -98,24 +85,7 @@ static int retdemangle(const char *str) { } static RBinAddr* binsym(RBinArch *arch, int sym) { - RBinAddr *ret = NULL; - switch (sym) { - - // XXX - TODO implement the INIT FINI symbol requests - case R_BIN_SYM_INIT: - case R_BIN_SYM_FINI: - case R_BIN_SYM_ENTRY: - if (!(ret = R_NEW0 (RBinAddr))) - return NULL; - ret->offset = r_bin_java_get_entrypoint (arch->bin_obj); - break; - case R_BIN_SYM_MAIN: - if (!(ret = R_NEW0 (RBinAddr))) - return NULL; - ret->offset = ret->rva = r_bin_java_get_main (arch->bin_obj); - break; - } - return ret; + return r_bin_java_get_entrypoint(arch->bin_obj, sym); } static RList* lines(RBinArch *arch) { diff --git a/libr/core/cmd_print.c b/libr/core/cmd_print.c index 28f9017dcb..5d9a7ff104 100644 --- a/libr/core/cmd_print.c +++ b/libr/core/cmd_print.c @@ -787,9 +787,9 @@ static int cmd_print(void *data, const char *input) { ut8 settings_changed = R_FALSE, bw_disassemble = R_FALSE; char *new_arch; ut32 pd_result = R_FALSE, processed_cmd = R_FALSE; - char *old_arch = strdup (r_config_get (core->config, "asm.arch")); - int segoff = r_config_get_i (core->config, "asm.segoff"); - int old_bits = r_config_get_i (core->config, "asm.bits"); + old_arch = strdup (r_config_get (core->config, "asm.arch")); + segoff = r_config_get (core->config, "asm.segoff"); + old_bits = r_config_get_i (core->config, "asm.bits"); // XXX - this is necessay b/c radare will automatically // swap flags if arch is x86 and bits == 16 see: __setsegoff in config.c diff --git a/libr/include/r_anal.h b/libr/include/r_anal.h index 643f15a260..1b6a63e8ee 100644 --- a/libr/include/r_anal.h +++ b/libr/include/r_anal.h @@ -585,6 +585,7 @@ typedef struct r_anal_cond_t { } RAnalCond; typedef struct r_anal_bb_t { + char *name; ut64 addr; ut64 size; ut64 jump; @@ -764,6 +765,7 @@ R_API RAnalVar *r_anal_fcn_get_var(RAnalFunction *fs, int num, int dir); R_API char *r_anal_fcn_to_string(RAnal *a, RAnalFunction* fs); R_API int r_anal_str_to_fcn(RAnal *a, RAnalFunction *f, const char *_str); R_API int r_anal_fcn_count (RAnal *a, ut64 from, ut64 to); +R_API RAnalBlock *r_anal_fcn_bbget(RAnalFunction *fcn, ut64 addr); // default 20 #if 0 #define r_anal_fcn_get_refs(x) x->refs diff --git a/shlr/java/class.c b/shlr/java/class.c index 387be77378..1cb1748f82 100644 --- a/shlr/java/class.c +++ b/shlr/java/class.c @@ -24,7 +24,7 @@ // taken from LLVM Code Byte Swap // TODO: move into r_util -static ut32 r_bin_java_swap_uint(ut32 x){ +static ut32 r_bin_java_swap_uint(ut32 x) { ut32 Byte0 = x & 0x000000FF; ut32 Byte1 = x & 0x0000FF00; ut32 Byte2 = x & 0x00FF0000; @@ -32,33 +32,33 @@ static ut32 r_bin_java_swap_uint(ut32 x){ return (Byte0 << 24) | (Byte1 << 8) | (Byte2 >> 8) | (Byte3 >> 24); } -static ut16 r_bin_java_swap_ushort(ut16 x){ +static ut16 r_bin_java_swap_ushort(ut16 x) { ut32 Byte0 = x & 0x00FF; ut32 Byte1 = x & 0xFF00; return (Byte0 << 8) | (Byte1 >> 8); } -static ut32 r_bin_java_read_int(RBinJavaObj *bin, ut64 offset){ +static ut32 r_bin_java_read_int(RBinJavaObj *bin, ut64 offset) { ut32 sh = 0; r_buf_read_at (bin->b, offset, (ut8*)&sh, 4); - return r_bin_java_swap_uint(sh); + return r_bin_java_swap_uint (sh); } -static ut16 r_bin_java_read_short(RBinJavaObj *bin, ut64 offset){ +static ut16 r_bin_java_read_short(RBinJavaObj *bin, ut64 offset) { ut16 sh = 0; r_buf_read_at (bin->b, offset, (ut8*)&sh, 2); return r_bin_java_swap_ushort (sh); } -static ut32 r_bin_java_read_int_from_buffer(ut8 *buffer, ut64 offset){ +static ut32 r_bin_java_read_int_from_buffer(ut8 *buffer, ut64 offset) { ut32 sh = 0; - memcpy((ut8 *)&sh, buffer, 4); - return r_bin_java_swap_uint(sh); + memcpy ((ut8 *)&sh, buffer, 4); + return r_bin_java_swap_uint (sh); } -static ut16 r_bin_java_read_short_from_buffer(ut8 *buffer, ut64 offset){ +static ut16 r_bin_java_read_short_from_buffer(ut8 *buffer, ut64 offset) { ut16 sh = 0; - memcpy((ut8 *)&sh, buffer, 2); + memcpy ((ut8 *)&sh, buffer, 2); return r_bin_java_swap_ushort (sh); } @@ -268,62 +268,62 @@ static RBinJavaAttrMetas RBIN_JAVA_ATTRS_METAS[] = { { "Unknown", R_BIN_JAVA_ATTR_TYPE_UNKNOWN_ATTR, &RBIN_JAVA_ATTRS_ALLOCS[20]} }; -R_API void debug_dump_all_cp_rcons_obj(RBinJavaObj * BIN_OBJ){ +R_API void debug_dump_all_cp_rcons_obj(RBinJavaObj * BIN_OBJ) { int idx = 0; char *cp_name = NULL; int ord = 0; RBinJavaCPTypeObj *item = NULL; /* - for (idx = 1; idx < BIN_OBJ->cp_count; idx++){ - item = (RBinJavaCPTypeObj *) r_bin_java_get_item_from_bin_cp_list(BIN_OBJ, idx); + for (idx = 1; idx < BIN_OBJ->cp_count; idx++) { + item = (RBinJavaCPTypeObj *) r_bin_java_get_item_from_bin_cp_list (BIN_OBJ, idx); cp_name = ((RBinJavaCPTypeMetas *) item->metas->type_info)->name; ord = item->metas->ord; - IFDBG r_cons_printf("Found the following CP Obj: %d ord(%d) %s\n",idx, ord, cp_name); + IFDBG r_cons_printf ("Found the following CP Obj: %d ord(%d) %s\n",idx, ord, cp_name); }*/ } -R_API void debug_dump_all_cp_obj(RBinJavaObj * BIN_OBJ){ +R_API void debug_dump_all_cp_obj(RBinJavaObj * BIN_OBJ) { int idx = 0; char *cp_name = NULL; int ord = 0; RBinJavaCPTypeObj *item = NULL; - for (idx = 0; idx < BIN_OBJ->cp_count; idx++){ - item = (RBinJavaCPTypeObj *) r_bin_java_get_item_from_bin_cp_list(BIN_OBJ, idx); + for (idx = 0; idx < BIN_OBJ->cp_count; idx++) { + item = (RBinJavaCPTypeObj *) r_bin_java_get_item_from_bin_cp_list (BIN_OBJ, idx); cp_name = ((RBinJavaCPTypeMetas *) item->metas->type_info)->name; ord = item->metas->ord; - IFDBG eprintf("Found the following CP Obj: %d ord(%d) %s\n",idx, ord, cp_name); - if (item && item->tag == R_BIN_JAVA_CP_NAMEANDTYPE){ - IFDBG eprintf("\t NameAndType name_idx: %d descriptor_idx: %d\n", item->info.cp_name_and_type.name_idx, item->info.cp_name_and_type.descriptor_idx); + IFDBG eprintf ("Found the following CP Obj: %d ord(%d) %s\n",idx, ord, cp_name); + if (item && item->tag == R_BIN_JAVA_CP_NAMEANDTYPE) { + IFDBG eprintf ("\t NameAndType name_idx: %d descriptor_idx: %d\n", item->info.cp_name_and_type.name_idx, item->info.cp_name_and_type.descriptor_idx); } - if (item && item->tag == R_BIN_JAVA_CP_UTF8){ - IFDBG eprintf("\t Utf8 bytes: %s\n", item->info.cp_utf8.bytes); + if (item && item->tag == R_BIN_JAVA_CP_UTF8) { + IFDBG eprintf ("\t Utf8 bytes: %s\n", item->info.cp_utf8.bytes); } } } -R_API RBinJavaCPTypeObj* r_bin_java_get_java_null_cp(){ +R_API RBinJavaCPTypeObj* r_bin_java_get_java_null_cp() { if(R_BIN_JAVA_NULL_TYPE_INITTED) return &R_BIN_JAVA_NULL_TYPE; R_BIN_JAVA_NULL_TYPE_INITTED = 1; - memset(&R_BIN_JAVA_NULL_TYPE, 0, sizeof(R_BIN_JAVA_NULL_TYPE)); - R_BIN_JAVA_NULL_TYPE.metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + memset (&R_BIN_JAVA_NULL_TYPE, 0, sizeof (R_BIN_JAVA_NULL_TYPE)); + R_BIN_JAVA_NULL_TYPE.metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); if (R_BIN_JAVA_NULL_TYPE.metas == NULL) return NULL; - memset( R_BIN_JAVA_NULL_TYPE.metas, 0, sizeof(RBinJavaMetaInfo)); + memset ( R_BIN_JAVA_NULL_TYPE.metas, 0, sizeof (RBinJavaMetaInfo)); R_BIN_JAVA_NULL_TYPE.metas->type_info = &R_BIN_JAVA_CP_METAS[0]; R_BIN_JAVA_NULL_TYPE.metas->ord = 0; R_BIN_JAVA_NULL_TYPE.file_offset = 0; return &R_BIN_JAVA_NULL_TYPE; } -R_API RBinJavaElementValueMetas* r_bin_java_get_ev_meta_from_tag(ut8 tag){ +R_API RBinJavaElementValueMetas* r_bin_java_get_ev_meta_from_tag(ut8 tag) { ut16 i = 0; RBinJavaElementValueMetas *result = &R_BIN_JAVA_ELEMENT_VALUE_METAS[13]; - for (i = 0; i < R_BIN_JAVA_ELEMENT_VALUE_METAS_SZ; i++ ){ - if (tag == R_BIN_JAVA_ELEMENT_VALUE_METAS[i].tag){ + for (i = 0; i < R_BIN_JAVA_ELEMENT_VALUE_METAS_SZ; i++ ) { + if (tag == R_BIN_JAVA_ELEMENT_VALUE_METAS[i].tag) { result = &R_BIN_JAVA_ELEMENT_VALUE_METAS[i]; break; } @@ -331,33 +331,33 @@ R_API RBinJavaElementValueMetas* r_bin_java_get_ev_meta_from_tag(ut8 tag){ return result; } -R_API RBinJavaCPTypeMetas* r_bin_java_get_cp_meta_from_tag(ut8 tag){ +R_API RBinJavaCPTypeMetas* r_bin_java_get_cp_meta_from_tag(ut8 tag) { ut16 i = 0; // set default to unknown. RBinJavaCPTypeMetas *result = &R_BIN_JAVA_CP_METAS[2]; - for (i = 0; i < R_BIN_JAVA_CP_METAS_SZ; i++ ){ - if (tag == R_BIN_JAVA_CP_METAS[i].tag){ + for (i = 0; i < R_BIN_JAVA_CP_METAS_SZ; i++ ) { + if (tag == R_BIN_JAVA_CP_METAS[i].tag) { result = &R_BIN_JAVA_CP_METAS[i]; break; } } return result; } -void deinit_java_type_null(){ +void deinit_java_type_null() { if (R_BIN_JAVA_NULL_TYPE.metas) - free(R_BIN_JAVA_NULL_TYPE.metas); + free (R_BIN_JAVA_NULL_TYPE.metas); } -R_API ut8 r_bin_java_quick_check(ut8 expected_tag, ut8 actual_tag, ut32 actual_len, const char* name){ +R_API ut8 r_bin_java_quick_check(ut8 expected_tag, ut8 actual_tag, ut32 actual_len, const char* name) { ut8 result = 0; - if (expected_tag > R_BIN_JAVA_CP_METAS_SZ){ + if (expected_tag > R_BIN_JAVA_CP_METAS_SZ) { eprintf ("Invalid tag '%d' expected 0x%02x for %s.\n",actual_tag, expected_tag, name); result = 1; - }else if (expected_tag != actual_tag){ + }else if (expected_tag != actual_tag) { eprintf ("Invalid tag '%d' expected 0x%02x for %s.\n",actual_tag, expected_tag, name); result = 1; - }else if (actual_len < R_BIN_JAVA_CP_METAS[expected_tag].len){ + }else if (actual_len < R_BIN_JAVA_CP_METAS[expected_tag].len) { eprintf ("Unable to parse '%d' expected sz=0x%02x got 0x%02x for %s.\n", actual_tag, R_BIN_JAVA_CP_METAS[expected_tag].len, actual_len, name); result = 2; @@ -365,8 +365,8 @@ R_API ut8 r_bin_java_quick_check(ut8 expected_tag, ut8 actual_tag, ut32 actual_l return result; } -R_API ut64 rbin_java_raw_to_long(ut8* raw, ut64 offset){ - return RBIN_JAVA_LONG(raw, offset); +R_API ut64 rbin_java_raw_to_long(ut8* raw, ut64 offset) { + return RBIN_JAVA_LONG (raw, offset); } // yanked from careercup, because i am lazy: @@ -376,38 +376,38 @@ R_API double my_pow(double a,int b) { if(b==0) return 1; if(b==1) return a; - double temp=my_pow(a,b/2); + double temp=my_pow (a,b/2); temp=temp*temp; return ((b%2==0)? temp : temp*a); } -double rbin_java_raw_to_double(ut8* raw, ut64 offset){ +double rbin_java_raw_to_double(ut8* raw, ut64 offset) { ut64 bits = RBIN_JAVA_LONG(raw, offset); int s = ((bits >> 63) == 0) ? 1 : -1; - int e = (int)((bits >> 52) & 0x7ffL); - long m = (e == 0) ? - (bits & 0xfffffffffffffL) << 1 : - (bits & 0xfffffffffffffL) | 0x10000000000000L; - double result = 0.0; - IFDBG printf("Convert Long to Double: %llx\n", bits); - if (0x7ff0000000000000 == bits){ - result = INFINITY; - }else if (0xfff0000000000000 == bits){ - result = -INFINITY; - }else if (0x7ff0000000000001 <= bits && bits <= 0x7fffffffffffffffL ){ - result = NAN; - }else if (0xfff0000000000001 <= bits && bits <= 0xffffffffffffffffL ){ - result = NAN; - }else{ - result = s* m* my_pow(2, e-1075);//XXXX TODO Get double to work correctly here - IFDBG printf("Convert Long to Double s: %d, m: 0x%08lx, e: 0x%08x, result: %f\n", s, m, e, result); - } - return result; + int e = (int)((bits >> 52) & 0x7ffL); + long m = (e == 0) ? + (bits & 0xfffffffffffffL) << 1 : + (bits & 0xfffffffffffffL) | 0x10000000000000L; + double result = 0.0; + IFDBG printf ("Convert Long to Double: %llx\n", bits); + if (0x7ff0000000000000 == bits) { + result = INFINITY; + }else if (0xfff0000000000000 == bits) { + result = -INFINITY; + }else if (0x7ff0000000000001 <= bits && bits <= 0x7fffffffffffffffL ) { + result = NAN; + }else if (0xfff0000000000001 <= bits && bits <= 0xffffffffffffffffL ) { + result = NAN; + }else{ + result = s* m* my_pow (2, e-1075);//XXXX TODO Get double to work correctly here + IFDBG printf ("Convert Long to Double s: %d, m: 0x%08lx, e: 0x%08x, result: %f\n", s, m, e, result); + } + return result; } -R_API RBinJavaField* r_bin_java_read_next_method(RBinJavaObj *bin, ut64 offset){ +R_API RBinJavaField* r_bin_java_read_next_method(RBinJavaObj *bin, ut64 offset) { RBinJavaField *method; RBinJavaAttrInfo* attr; ut32 i, idx; @@ -418,63 +418,63 @@ R_API RBinJavaField* r_bin_java_read_next_method(RBinJavaObj *bin, ut64 offset){ if (offset == R_BUF_CUR ) offset = bin->b->cur; - method = (RBinJavaField *) malloc(sizeof(RBinJavaField)); - method->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + method = (RBinJavaField *) malloc (sizeof (RBinJavaField)); + method->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); if(method->metas) - memset(method->metas, 0, sizeof(RBinJavaMetaInfo)); + memset (method->metas, 0, sizeof (RBinJavaMetaInfo)); r_buf_read_at (bin->b, offset, (ut8*)buf, 8); method->file_offset = offset; method->flags = R_BIN_JAVA_USHORT (buf, 0); // need to subtract 1 for the idx - method->name_idx = R_BIN_JAVA_USHORT(buf, 2); - method->descriptor_idx = R_BIN_JAVA_USHORT(buf, 4); - method->attr_count = R_BIN_JAVA_USHORT(buf, 6); - method->attributes = r_list_new(); + method->name_idx = R_BIN_JAVA_USHORT (buf, 2); + method->descriptor_idx = R_BIN_JAVA_USHORT (buf, 4); + method->attr_count = R_BIN_JAVA_USHORT (buf, 6); + method->attributes = r_list_new (); method->type = R_BIN_JAVA_FIELD_TYPE_METHOD; method->metas->ord = bin->method_idx; idx = method->name_idx; - item = r_bin_java_get_item_from_bin_cp_list(bin, idx); - method->name = r_bin_java_get_utf8_from_bin_cp_list(bin, (ut32) (method->name_idx)); - IFDBG eprintf("Method name_idx: %d, which is: ord: %d, name: %s, value: %s\n", idx, item->metas->ord, ((RBinJavaCPTypeMetas *) item->metas->type_info)->name, method->name); - if(method->name == NULL){ - method->name = (char *)malloc(21); - snprintf((char *) method->name, 20, "sym.method_%08x", method->metas->ord); - IFDBG eprintf("r_bin_java_read_next_method: Unable to find the name for 0x%02x index.\n", method->name_idx); + item = r_bin_java_get_item_from_bin_cp_list (bin, idx); + method->name = r_bin_java_get_utf8_from_bin_cp_list (bin, (ut32) (method->name_idx)); + IFDBG eprintf ("Method name_idx: %d, which is: ord: %d, name: %s, value: %s\n", idx, item->metas->ord, ((RBinJavaCPTypeMetas *) item->metas->type_info)->name, method->name); + if(method->name == NULL) { + method->name = (char *)malloc (21); + snprintf ((char *) method->name, 20, "sym.method_%08x", method->metas->ord); + IFDBG eprintf ("r_bin_java_read_next_method: Unable to find the name for 0x%02x index.\n", method->name_idx); } idx = method->descriptor_idx; - item = r_bin_java_get_item_from_bin_cp_list(bin, idx); - method->descriptor = r_bin_java_get_utf8_from_bin_cp_list(bin, (ut32) method->descriptor_idx); - IFDBG eprintf("Method descriptor_idx: %d, which is: ord: %d, name: %s, value: %s\n", idx, item->metas->ord, ((RBinJavaCPTypeMetas *) item->metas->type_info)->name, method->descriptor); - if(method->descriptor == NULL){ + item = r_bin_java_get_item_from_bin_cp_list (bin, idx); + method->descriptor = r_bin_java_get_utf8_from_bin_cp_list (bin, (ut32) method->descriptor_idx); + IFDBG eprintf ("Method descriptor_idx: %d, which is: ord: %d, name: %s, value: %s\n", idx, item->metas->ord, ((RBinJavaCPTypeMetas *) item->metas->type_info)->name, method->descriptor); + if(method->descriptor == NULL) { method->descriptor = r_str_dup (NULL, "NULL"); - IFDBG eprintf("r_bin_java_read_next_method: Unable to find the descriptor for 0x%02x index.\n", method->descriptor_idx); + IFDBG eprintf ("r_bin_java_read_next_method: Unable to find the descriptor for 0x%02x index.\n", method->descriptor_idx); } - IFDBG eprintf("Looking for a NameAndType CP with name_idx: %d descriptor_idx: %d\n", method->name_idx, method->descriptor_idx); - method->field_ref_cp_obj = r_bin_java_find_cp_ref_info_from_name_and_type(method->name_idx, method->descriptor_idx); - if (method->field_ref_cp_obj){ - IFDBG eprintf("Found the obj.\n"); - item = r_bin_java_get_item_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, method->field_ref_cp_obj->info.cp_method.class_idx); - IFDBG eprintf("Method class reference value: %d, which is: ord: %d, name: %s\n", method->field_ref_cp_obj->info.cp_method.class_idx, item->metas->ord, ((RBinJavaCPTypeMetas *) item->metas->type_info)->name); - method->class_name = r_bin_java_get_item_name_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, item); - IFDBG eprintf("Method requesting ref_cp_obj the following which is: ord: %d, name: %s\n", method->field_ref_cp_obj->metas->ord, ((RBinJavaCPTypeMetas *) method->field_ref_cp_obj->metas->type_info)->name); - IFDBG eprintf("MethodRef class name resolves to: %s\n", method->class_name); + IFDBG eprintf ("Looking for a NameAndType CP with name_idx: %d descriptor_idx: %d\n", method->name_idx, method->descriptor_idx); + method->field_ref_cp_obj = r_bin_java_find_cp_ref_info_from_name_and_type (method->name_idx, method->descriptor_idx); + if (method->field_ref_cp_obj) { + IFDBG eprintf ("Found the obj.\n"); + item = r_bin_java_get_item_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, method->field_ref_cp_obj->info.cp_method.class_idx); + IFDBG eprintf ("Method class reference value: %d, which is: ord: %d, name: %s\n", method->field_ref_cp_obj->info.cp_method.class_idx, item->metas->ord, ((RBinJavaCPTypeMetas *) item->metas->type_info)->name); + method->class_name = r_bin_java_get_item_name_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, item); + IFDBG eprintf ("Method requesting ref_cp_obj the following which is: ord: %d, name: %s\n", method->field_ref_cp_obj->metas->ord, ((RBinJavaCPTypeMetas *) method->field_ref_cp_obj->metas->type_info)->name); + IFDBG eprintf ("MethodRef class name resolves to: %s\n", method->class_name); if (method->class_name == NULL) - method->class_name = r_str_dup(NULL, "NULL"); + method->class_name = r_str_dup (NULL, "NULL"); } - IFDBG printf("Parsing %s(%s)", method->name, method->descriptor); + IFDBG printf ("Parsing %s(%s)", method->name, method->descriptor); if (method->attr_count > 0) { - for (i=0; i< method->attr_count ; i++){ + for (i=0; i< method->attr_count ; i++) { attr = r_bin_java_read_next_attr(bin, bin->b->cur); - if ((r_bin_java_get_attr_type_by_name(attr->name))->type == R_BIN_JAVA_ATTR_TYPE_CODE_ATTR){ + if ((r_bin_java_get_attr_type_by_name(attr->name))->type == R_BIN_JAVA_ATTR_TYPE_CODE_ATTR) { // This is necessary for determing the appropriate number of bytes when readin // uoffset, ustack, ulocalvar values bin->cur_method_code_length = attr->info.code_attr.code_length; @@ -482,7 +482,7 @@ R_API RBinJavaField* r_bin_java_read_next_method(RBinJavaObj *bin, ut64 offset){ bin->ustack_sz = 2;// (attr->info.code_attr.max_stack > 65535) ? 4 : 2; bin->ulocalvar_sz = 2;//(attr->info.code_attr.max_locals > 65535) ? 4 : 2; } - r_list_append(method->attributes, attr); + r_list_append (method->attributes, attr); } } @@ -493,7 +493,7 @@ R_API RBinJavaField* r_bin_java_read_next_method(RBinJavaObj *bin, ut64 offset){ -R_API RBinJavaField* r_bin_java_read_next_field(RBinJavaObj *bin, ut64 offset){ +R_API RBinJavaField* r_bin_java_read_next_field(RBinJavaObj *bin, ut64 offset) { RBinJavaField *field; RBinJavaAttrInfo* attr; ut32 i; @@ -502,48 +502,48 @@ R_API RBinJavaField* r_bin_java_read_next_field(RBinJavaObj *bin, ut64 offset){ if (offset == R_BUF_CUR ) offset = bin->b->cur; - field = (RBinJavaField *) malloc(sizeof(RBinJavaField)); - field->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + field = (RBinJavaField *) malloc (sizeof (RBinJavaField)); + field->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); if(field->metas) - memset(field->metas, 0, sizeof(RBinJavaMetaInfo)); + memset (field->metas, 0, sizeof (RBinJavaMetaInfo)); r_buf_read_at (bin->b, offset, (ut8*)buf, 8); field->file_offset = offset; field->flags = R_BIN_JAVA_USHORT (buf, 0); - field->name_idx = R_BIN_JAVA_USHORT(buf, 2); - field->descriptor_idx = R_BIN_JAVA_USHORT(buf, 4); - field->attr_count = R_BIN_JAVA_USHORT(buf, 6); - field->attributes = r_list_new(); + field->name_idx = R_BIN_JAVA_USHORT (buf, 2); + field->descriptor_idx = R_BIN_JAVA_USHORT (buf, 4); + field->attr_count = R_BIN_JAVA_USHORT (buf, 6); + field->attributes = r_list_new (); field->type = R_BIN_JAVA_FIELD_TYPE_FIELD; field->metas->ord = bin->field_idx; - field->name = r_bin_java_get_utf8_from_bin_cp_list(bin, field->name_idx); - if(field->name == NULL){ + field->name = r_bin_java_get_utf8_from_bin_cp_list (bin, field->name_idx); + if(field->name == NULL) { field->name = r_str_dup (NULL, "NULL"); - eprintf("r_bin_java_read_next_field: Unable to find the name for %d index.\n", field->name_idx); + eprintf ("r_bin_java_read_next_field: Unable to find the name for %d index.\n", field->name_idx); } - field->descriptor = r_bin_java_get_utf8_from_bin_cp_list(bin, field->descriptor_idx); - if(field->descriptor == NULL){ + field->descriptor = r_bin_java_get_utf8_from_bin_cp_list (bin, field->descriptor_idx); + if(field->descriptor == NULL) { field->descriptor = r_str_dup (NULL, "NULL"); - eprintf("r_bin_java_read_next_field: Unable to find the descriptor for %d index.\n", field->descriptor_idx); + eprintf ("r_bin_java_read_next_field: Unable to find the descriptor for %d index.\n", field->descriptor_idx); } - field->field_ref_cp_obj = r_bin_java_find_cp_ref_info_from_name_and_type(field->name_idx+1, field->descriptor_idx+1); - if (field->field_ref_cp_obj){ - field->class_name = r_bin_java_get_item_name_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, field->field_ref_cp_obj); + field->field_ref_cp_obj = r_bin_java_find_cp_ref_info_from_name_and_type (field->name_idx+1, field->descriptor_idx+1); + if (field->field_ref_cp_obj) { + field->class_name = r_bin_java_get_item_name_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, field->field_ref_cp_obj); if (field->class_name == NULL) - field->class_name = r_str_dup(NULL, "NULL"); + field->class_name = r_str_dup (NULL, "NULL"); } if (field->attr_count > 0) { - for (i=0; i< field->attr_count ; i++){ + for (i=0; i< field->attr_count ; i++) { attr = r_bin_java_read_next_attr(bin, bin->b->cur); - r_list_append(field->attributes, attr); + r_list_append (field->attributes, attr); } } @@ -551,27 +551,27 @@ R_API RBinJavaField* r_bin_java_read_next_field(RBinJavaObj *bin, ut64 offset){ } -R_API RBinJavaCPTypeObj* r_bin_java_clone_cp_idx(RBinJavaObj *bin, ut32 idx){ +R_API RBinJavaCPTypeObj* r_bin_java_clone_cp_idx(RBinJavaObj *bin, ut32 idx) { RBinJavaCPTypeObj* obj = NULL; if (bin) - obj = r_bin_java_get_item_from_bin_cp_list(bin, idx); - return r_bin_java_clone_cp_item(obj); + obj = r_bin_java_get_item_from_bin_cp_list (bin, idx); + return r_bin_java_clone_cp_item (obj); } -R_API RBinJavaCPTypeObj* r_bin_java_clone_cp_item(RBinJavaCPTypeObj *obj){ +R_API RBinJavaCPTypeObj* r_bin_java_clone_cp_item(RBinJavaCPTypeObj *obj) { RBinJavaCPTypeObj *clone_obj = NULL; - + if (obj == NULL) return clone_obj; - clone_obj = (RBinJavaCPTypeObj*) malloc(sizeof(RBinJavaCPTypeObj)); - if(clone_obj){ - memcpy(clone_obj, obj, sizeof(RBinJavaCPTypeObj)); - if(obj->tag == R_BIN_JAVA_CP_UTF8){ - clone_obj->info.cp_utf8.bytes = (ut8 *) malloc(obj->info.cp_utf8.length+1); - if (clone_obj->info.cp_utf8.bytes){ - memcpy(clone_obj->info.cp_utf8.bytes, obj->info.cp_utf8.bytes, clone_obj->info.cp_utf8.length+1); + clone_obj = (RBinJavaCPTypeObj*) malloc (sizeof (RBinJavaCPTypeObj)); + if(clone_obj) { + memcpy (clone_obj, obj, sizeof (RBinJavaCPTypeObj)); + if(obj->tag == R_BIN_JAVA_CP_UTF8) { + clone_obj->info.cp_utf8.bytes = (ut8 *) malloc (obj->info.cp_utf8.length+1); + if (clone_obj->info.cp_utf8.bytes) { + memcpy (clone_obj->info.cp_utf8.bytes, obj->info.cp_utf8.bytes, clone_obj->info.cp_utf8.length+1); }else{ // TODO: eprintf allocation error } @@ -581,7 +581,7 @@ R_API RBinJavaCPTypeObj* r_bin_java_clone_cp_item(RBinJavaCPTypeObj *obj){ } -R_API RBinJavaCPTypeObj* r_bin_java_read_next_constant_pool_item(RBinJavaObj *bin, ut64 offset){ +R_API RBinJavaCPTypeObj* r_bin_java_read_next_constant_pool_item(RBinJavaObj *bin, ut64 offset) { RBinJavaCPTypeMetas *java_constant_info = NULL; ut8 tag = 0; ut64 buf_sz = 0; @@ -593,11 +593,11 @@ R_API RBinJavaCPTypeObj* r_bin_java_read_next_constant_pool_item(RBinJavaObj *bi offset = bin->b->cur; r_buf_read_at (bin->b, offset, &tag, 1); - if ( tag > R_BIN_JAVA_CP_METAS_SZ){ + if ( tag > R_BIN_JAVA_CP_METAS_SZ) { eprintf ("Invalid tag '%d' at offset 0x%08llx\n", tag, (ut64)offset); - java_obj = r_bin_java_unknown_cp_new(bin, &tag, 1); + java_obj = r_bin_java_unknown_cp_new (bin, &tag, 1); - if (java_obj != NULL && java_obj->metas != NULL){ + if (java_obj != NULL && java_obj->metas != NULL) { java_obj->file_offset = offset; } return java_obj; @@ -610,39 +610,39 @@ R_API RBinJavaCPTypeObj* r_bin_java_read_next_constant_pool_item(RBinJavaObj *bi } buf_sz += java_constant_info->len; - if (java_constant_info->tag == 1){ - r_buf_read_at(bin->b, offset+1, (ut8 *) &str_len, sizeof(ut16)); + if (java_constant_info->tag == 1) { + r_buf_read_at(bin->b, offset+1, (ut8 *) &str_len, sizeof (ut16)); buf_sz += r_bin_java_swap_ushort (str_len); } - buf = malloc(buf_sz); + buf = malloc (buf_sz); if (!buf) return java_obj; - memset(buf, 0, buf_sz); + memset (buf, 0, buf_sz); r_buf_read_at(bin->b, offset, (ut8*) buf, buf_sz); IFDBG printf ("Parsed the tag '%d':%s and create object from offset 0x%08llx.\n",tag, R_BIN_JAVA_CP_METAS[tag].name, offset); java_obj = (*java_constant_info->allocs->new_obj)(bin, buf, buf_sz); - if (java_obj != NULL && java_obj->metas != NULL){ + if (java_obj != NULL && java_obj->metas != NULL) { java_obj->file_offset = offset; //IFDBG printf ("java_obj->file_offset = 0x%08llx.\n",java_obj->file_offset); - }else if(java_obj == NULL){ + }else if(java_obj == NULL) { eprintf ("Unable to parse the tag '%d' and create valid object.\n",tag); - }else if(java_obj->metas == NULL){ + }else if(java_obj->metas == NULL) { eprintf ("Unable to parse the tag '%d' and create valid object.\n",tag); }else{ eprintf ("Failed to set the java_obj->metas-file_offset for '%d' offset is(0x%08llx).\n",tag, offset); } - free(buf); + free (buf); return java_obj; } -R_API RBinJavaInterfaceInfo* r_bin_java_read_next_interface_item(RBinJavaObj *bin, ut64 offset){ +R_API RBinJavaInterfaceInfo* r_bin_java_read_next_interface_item(RBinJavaObj *bin, ut64 offset) { ut8 buf[2] = {0}; RBinJavaInterfaceInfo *interface_obj; @@ -650,7 +650,7 @@ R_API RBinJavaInterfaceInfo* r_bin_java_read_next_interface_item(RBinJavaObj *bi offset = bin->b->cur; r_buf_read_at (bin->b, offset, buf, 2); - interface_obj = r_bin_java_interface_new(bin, buf, 2); + interface_obj = r_bin_java_interface_new (bin, buf, 2); if (interface_obj) interface_obj->file_offset = offset; return interface_obj; @@ -674,9 +674,9 @@ ut32 r_bin_java_read_int(RBinJavaObj *bin, ut64 offset) { static void addrow (RBinJavaObj *bin, int addr, int line) { int n = bin->lines.count++; // XXX. possible memleak - bin->lines.addr = realloc (bin->lines.addr, sizeof(int)*n+1); + bin->lines.addr = realloc (bin->lines.addr, sizeof (int)*n+1); bin->lines.addr[n] = addr; - bin->lines.line = realloc (bin->lines.line, sizeof(int)*n+1); + bin->lines.line = realloc (bin->lines.line, sizeof (int)*n+1); bin->lines.line[n] = line; } @@ -688,14 +688,14 @@ R_API RBinJavaCPTypeObj* r_bin_java_get_item_from_cp(RBinJavaObj *bin, int i) { if (i < 1 || i > bin->cf.cp_count ) return &R_BIN_JAVA_NULL_TYPE; - RBinJavaCPTypeObj* obj = (RBinJavaCPTypeObj*)r_list_get_n(bin->cp_list, i); + RBinJavaCPTypeObj* obj = (RBinJavaCPTypeObj*)r_list_get_n (bin->cp_list, i); if (obj == NULL) return &R_BIN_JAVA_NULL_TYPE; return obj; } -R_API char* r_bin_java_get_utf8_from_bin_cp_list(RBinJavaObj *bin, ut64 idx){ +R_API char* r_bin_java_get_utf8_from_bin_cp_list (RBinJavaObj *bin, ut64 idx) { /* Search through the Constant Pool list for the given CP Index. If the idx not found by directly going to the list index, @@ -707,10 +707,10 @@ R_API char* r_bin_java_get_utf8_from_bin_cp_list(RBinJavaObj *bin, ut64 idx){ if (bin == NULL) return NULL; - return r_bin_java_get_utf8_from_cp_item_list(bin->cp_list, idx); + return r_bin_java_get_utf8_from_cp_item_list (bin->cp_list, idx); } -R_API char* r_bin_java_get_name_from_bin_cp_list(RBinJavaObj *bin, ut64 idx){ +R_API char* r_bin_java_get_name_from_bin_cp_list(RBinJavaObj *bin, ut64 idx) { /* Search through the Constant Pool list for the given CP Index. If the idx not found by directly going to the list index, @@ -722,10 +722,10 @@ R_API char* r_bin_java_get_name_from_bin_cp_list(RBinJavaObj *bin, ut64 idx){ if (bin == NULL) return NULL; - return r_bin_java_get_name_from_cp_item_list(bin->cp_list, idx); + return r_bin_java_get_name_from_cp_item_list (bin->cp_list, idx); } -R_API char* r_bin_java_get_desc_from_bin_cp_list(RBinJavaObj *bin, ut64 idx){ +R_API char* r_bin_java_get_desc_from_bin_cp_list(RBinJavaObj *bin, ut64 idx) { /* Search through the Constant Pool list for the given CP Index. If the idx not found by directly going to the list index, @@ -737,10 +737,10 @@ R_API char* r_bin_java_get_desc_from_bin_cp_list(RBinJavaObj *bin, ut64 idx){ if (bin == NULL) return NULL; - return r_bin_java_get_desc_from_cp_item_list(bin->cp_list, idx); + return r_bin_java_get_desc_from_cp_item_list (bin->cp_list, idx); } -R_API RBinJavaCPTypeObj* r_bin_java_get_item_from_bin_cp_list(RBinJavaObj *bin, ut64 idx){ +R_API RBinJavaCPTypeObj* r_bin_java_get_item_from_bin_cp_list(RBinJavaObj *bin, ut64 idx) { /* Search through the Constant Pool list for the given CP Index. If the idx not found by directly going to the list index, @@ -755,10 +755,10 @@ R_API RBinJavaCPTypeObj* r_bin_java_get_item_from_bin_cp_list(RBinJavaObj *bin, if (idx > bin->cp_count || idx == 0) return r_bin_java_get_java_null_cp(); - return r_bin_java_get_item_from_cp_item_list(bin->cp_list, idx); + return r_bin_java_get_item_from_cp_item_list (bin->cp_list, idx); } -R_API char* r_bin_java_get_item_name_from_bin_cp_list(RBinJavaObj *bin, RBinJavaCPTypeObj *obj){ +R_API char* r_bin_java_get_item_name_from_bin_cp_list(RBinJavaObj *bin, RBinJavaCPTypeObj *obj) { /* Given a constant poool object Class, FieldRef, MethodRef, or InterfaceMethodRef return the actual descriptor string. @@ -769,10 +769,10 @@ R_API char* r_bin_java_get_item_name_from_bin_cp_list(RBinJavaObj *bin, RBinJava if (bin == NULL) return NULL; - return r_bin_java_get_item_name_from_cp_item_list(bin->cp_list, obj); + return r_bin_java_get_item_name_from_cp_item_list (bin->cp_list, obj); } -R_API char* r_bin_java_get_item_desc_from_bin_cp_list(RBinJavaObj *bin, RBinJavaCPTypeObj *obj){ +R_API char* r_bin_java_get_item_desc_from_bin_cp_list (RBinJavaObj *bin, RBinJavaCPTypeObj *obj) { /* Given a constant poool object Class, FieldRef, MethodRef, or InterfaceMethodRef return the actual descriptor string. @@ -783,11 +783,11 @@ R_API char* r_bin_java_get_item_desc_from_bin_cp_list(RBinJavaObj *bin, RBinJava if (bin == NULL) return NULL; - return r_bin_java_get_item_desc_from_cp_item_list(bin->cp_list, obj); + return r_bin_java_get_item_desc_from_cp_item_list (bin->cp_list, obj); } -R_API char* r_bin_java_get_utf8_from_cp_item_list(RList *cp_list, ut64 idx){ +R_API char* r_bin_java_get_utf8_from_cp_item_list(RList *cp_list, ut64 idx) { /* Search through the Constant Pool list for the given CP Index. If the idx not found by directly going to the list index, @@ -804,24 +804,24 @@ R_API char* r_bin_java_get_utf8_from_cp_item_list(RList *cp_list, ut64 idx){ if (cp_list == NULL) return NULL; - item = (RBinJavaCPTypeObj *) r_list_get_n(cp_list, idx); - if (item && (item->tag == R_BIN_JAVA_CP_UTF8) && item->metas->ord == idx){ + item = (RBinJavaCPTypeObj *) r_list_get_n (cp_list, idx); + if (item && (item->tag == R_BIN_JAVA_CP_UTF8) && item->metas->ord == idx) { value = r_str_dup (NULL, (const char *) item->info.cp_utf8.bytes); } - if (value == NULL){ - r_list_foreach (cp_list, iter, item ) { - if (item && (item->tag == R_BIN_JAVA_CP_UTF8) && item->metas->ord == idx){ + if (value == NULL) { + r_list_foreach (cp_list, iter, item ) { + if (item && (item->tag == R_BIN_JAVA_CP_UTF8) && item->metas->ord == idx) { value = r_str_dup (NULL, (const char *) item->info.cp_utf8.bytes); break; - } - } + } + } } return value; } -R_API RBinJavaCPTypeObj* r_bin_java_get_item_from_cp_item_list(RList *cp_list, ut64 idx){ +R_API RBinJavaCPTypeObj* r_bin_java_get_item_from_cp_item_list (RList *cp_list, ut64 idx) { /* Search through the Constant Pool list for the given CP Index. @@ -832,14 +832,14 @@ R_API RBinJavaCPTypeObj* r_bin_java_get_item_from_cp_item_list(RList *cp_list, u if (cp_list == NULL) return NULL; - item = (RBinJavaCPTypeObj *) r_list_get_n(cp_list, idx); + item = (RBinJavaCPTypeObj *) r_list_get_n (cp_list, idx); return item; } -R_API char* r_bin_java_get_item_name_from_cp_item_list(RList *cp_list, RBinJavaCPTypeObj *obj){ +R_API char* r_bin_java_get_item_name_from_cp_item_list (RList *cp_list, RBinJavaCPTypeObj *obj) { /* Given a constant poool object Class, FieldRef, MethodRef, or InterfaceMethodRef return the actual descriptor string. @@ -853,24 +853,24 @@ R_API char* r_bin_java_get_item_name_from_cp_item_list(RList *cp_list, RBinJavaC if(obj == NULL || cp_list == NULL) return NULL; - switch(obj->tag){ + switch(obj->tag) { case R_BIN_JAVA_CP_NAMEANDTYPE: - return r_bin_java_get_utf8_from_cp_item_list(cp_list, obj->info.cp_name_and_type.name_idx); + return r_bin_java_get_utf8_from_cp_item_list (cp_list, obj->info.cp_name_and_type.name_idx); case R_BIN_JAVA_CP_CLASS: - return r_bin_java_get_utf8_from_cp_item_list(cp_list, obj->info.cp_class.name_idx); + return r_bin_java_get_utf8_from_cp_item_list (cp_list, obj->info.cp_class.name_idx); // XXX - Probably not good form, but they are the same memory structure case R_BIN_JAVA_CP_FIELDREF: case R_BIN_JAVA_CP_INTERFACEMETHOD_REF: case R_BIN_JAVA_CP_METHODREF: idx = obj->info.cp_method.name_and_type_idx; - obj = r_bin_java_get_item_from_cp_item_list(cp_list, obj->info.cp_method.name_and_type_idx); - return r_bin_java_get_item_name_from_cp_item_list(cp_list, obj); + obj = r_bin_java_get_item_from_cp_item_list (cp_list, obj->info.cp_method.name_and_type_idx); + return r_bin_java_get_item_name_from_cp_item_list (cp_list, obj); default: return NULL; } } -R_API char* r_bin_java_get_name_from_cp_item_list(RList *cp_list, ut64 idx){ +R_API char* r_bin_java_get_name_from_cp_item_list (RList *cp_list, ut64 idx) { /* Given a constant poool object Class, FieldRef, MethodRef, or InterfaceMethodRef return the actual descriptor string. @@ -879,14 +879,14 @@ R_API char* r_bin_java_get_name_from_cp_item_list(RList *cp_list, ut64 idx){ @rvalue ut8* (user frees) or NULL */ - RBinJavaCPTypeObj *obj = r_bin_java_get_item_from_cp_item_list(cp_list, idx); + RBinJavaCPTypeObj *obj = r_bin_java_get_item_from_cp_item_list (cp_list, idx); if (cp_list == NULL) return NULL; - return r_bin_java_get_item_name_from_cp_item_list(cp_list, obj); + return r_bin_java_get_item_name_from_cp_item_list (cp_list, obj); } -R_API char* r_bin_java_get_item_desc_from_cp_item_list(RList *cp_list, RBinJavaCPTypeObj *obj){ +R_API char* r_bin_java_get_item_desc_from_cp_item_list (RList *cp_list, RBinJavaCPTypeObj *obj) { /* Given a constant poool object FieldRef, MethodRef, or InterfaceMethodRef return the actual descriptor string. @@ -899,36 +899,36 @@ R_API char* r_bin_java_get_item_desc_from_cp_item_list(RList *cp_list, RBinJavaC if(obj == NULL || cp_list == NULL) return NULL; - switch(obj->tag){ + switch(obj->tag) { case R_BIN_JAVA_CP_NAMEANDTYPE: - return r_bin_java_get_utf8_from_cp_item_list(cp_list, obj->info.cp_name_and_type.descriptor_idx); + return r_bin_java_get_utf8_from_cp_item_list (cp_list, obj->info.cp_name_and_type.descriptor_idx); // XXX - Probably not good form, but they are the same memory structure case R_BIN_JAVA_CP_FIELDREF: case R_BIN_JAVA_CP_INTERFACEMETHOD_REF: case R_BIN_JAVA_CP_METHODREF: idx = obj->info.cp_method.name_and_type_idx; - obj = r_bin_java_get_item_from_cp_item_list(cp_list, obj->info.cp_method.name_and_type_idx); - return r_bin_java_get_item_desc_from_cp_item_list(cp_list, obj); + obj = r_bin_java_get_item_from_cp_item_list (cp_list, obj->info.cp_method.name_and_type_idx); + return r_bin_java_get_item_desc_from_cp_item_list (cp_list, obj); default: return NULL; } } -R_API char* r_bin_java_get_desc_from_cp_item_list(RList *cp_list, ut64 idx){ +R_API char* r_bin_java_get_desc_from_cp_item_list (RList *cp_list, ut64 idx) { /* Given a constant poool object FieldRef, MethodRef, or InterfaceMethodRef return the actual descriptor string. @rvalue ut8* (user frees) or NULL */ - RBinJavaCPTypeObj *obj = r_bin_java_get_item_from_cp_item_list(cp_list, idx); + RBinJavaCPTypeObj *obj = r_bin_java_get_item_from_cp_item_list (cp_list, idx); if (cp_list == NULL) return NULL; - return r_bin_java_get_item_desc_from_cp_item_list(cp_list, obj); + return r_bin_java_get_item_desc_from_cp_item_list (cp_list, obj); } -R_API RBinJavaAttrInfo* r_bin_java_get_method_code_attribute(RBinJavaField *method){ +R_API RBinJavaAttrInfo* r_bin_java_get_method_code_attribute(RBinJavaField *method) { /* Search through a methods attributes and return the code attr. @@ -938,19 +938,19 @@ R_API RBinJavaAttrInfo* r_bin_java_get_method_code_attribute(RBinJavaField *meth RBinJavaAttrInfo *result = NULL, *attr = NULL; RListIter *iter; - if (method){ - r_list_foreach (method->attributes, iter, attr ) { - if (attr && (attr->type == R_BIN_JAVA_ATTR_TYPE_CODE_ATTR) ){ + if (method) { + r_list_foreach (method->attributes, iter, attr ) { + if (attr && (attr->type == R_BIN_JAVA_ATTR_TYPE_CODE_ATTR) ) { result = attr; break; - } - } + } + } } return result; } -R_API RBinJavaAttrInfo* r_bin_java_get_attr_from_field(RBinJavaField *field, R_BIN_JAVA_ATTR_TYPE attr_type, ut32 pos ){ +R_API RBinJavaAttrInfo* r_bin_java_get_attr_from_field(RBinJavaField *field, R_BIN_JAVA_ATTR_TYPE attr_type, ut32 pos ) { /* Search through the Attribute list for the given type starting at position pos. rvalue: NULL or the first occurrence of attr_type after pos @@ -960,86 +960,86 @@ R_API RBinJavaAttrInfo* r_bin_java_get_attr_from_field(RBinJavaField *field, R_B RListIter *iter; ut32 i; - if (field){ - r_list_foreach (field->attributes, iter, item) { - // Note the increment happens after the comparison - if ( (i++) >= pos){ - if (item && (item->type == attr_type)){ + if (field) { + r_list_foreach (field->attributes, iter, item) { + // Note the increment happens after the comparison + if ( (i++) >= pos) { + if (item && (item->type == attr_type)) { attr = item; break; - } - } - } + } + } + } } return attr; } -R_API ut8* r_bin_java_get_attr_buf(RBinJavaObj *bin, ut64 offset, ut64 sz){ +R_API ut8* r_bin_java_get_attr_buf(RBinJavaObj *bin, ut64 offset, ut64 sz) { ut8 buf[10]; ut8 *attr_buf = NULL; if (offset == R_BUF_CUR) offset = bin->b->cur; - attr_buf = (ut8 *) malloc(sz); - memset(attr_buf, 0, sz); + attr_buf = (ut8 *) malloc (sz); + memset (attr_buf, 0, sz); r_buf_read_at (bin->b, offset, (ut8*)attr_buf, sz); - if (attr_buf == NULL){ - eprintf("Unable to allocate enough bytes (0x%04llx) to read in the attribute.\n", sz); + if (attr_buf == NULL) { + eprintf ("Unable to allocate enough bytes (0x%04llx) to read in the attribute.\n", sz); return attr_buf; } return attr_buf; } -R_API RBinJavaAttrInfo* r_bin_java_default_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_default_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset) { - RBinJavaAttrInfo *attr = (RBinJavaAttrInfo *) malloc(sizeof(RBinJavaAttrInfo)); + RBinJavaAttrInfo *attr = (RBinJavaAttrInfo *) malloc (sizeof (RBinJavaAttrInfo)); RBinJavaAttrMetas *type_info = NULL; ut64 offset = 0; // read the offset now, before we make modifications or read from the buffer - memset(attr, 0, sizeof(RBinJavaAttrInfo)); - attr->metas = (RBinJavaMetaInfo *)malloc(sizeof(RBinJavaMetaInfo)); - if (attr->metas == NULL){ - free(attr); + memset (attr, 0, sizeof (RBinJavaAttrInfo)); + attr->metas = (RBinJavaMetaInfo *)malloc (sizeof (RBinJavaMetaInfo)); + if (attr->metas == NULL) { + free (attr); return NULL; } - memset(attr->metas, 0, sizeof(RBinJavaMetaInfo)); + memset (attr->metas, 0, sizeof (RBinJavaMetaInfo)); attr->file_offset = buf_offset; - attr->name_idx = R_BIN_JAVA_USHORT(buffer, offset); + attr->name_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; attr->size += 2; - attr->length = R_BIN_JAVA_UINT(buffer, offset); + attr->length = R_BIN_JAVA_UINT (buffer, offset); offset += 4; attr->size += 4; - attr->name = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, attr->name_idx); - if(attr->name == NULL){ + attr->name = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, attr->name_idx); + if(attr->name == NULL) { // Something bad has happened attr->name = r_str_dup (NULL, "NULL"); - eprintf("r_bin_java_default_attr_new: Unable to find the name for %d index.\n", attr->name_idx); + eprintf ("r_bin_java_default_attr_new: Unable to find the name for %d index.\n", attr->name_idx); } - type_info = r_bin_java_get_attr_type_by_name(attr->name); + type_info = r_bin_java_get_attr_type_by_name (attr->name); attr->metas->ord = (R_BIN_JAVA_GLOBAL_BIN->attr_idx++); attr->metas->type_info = (void *) type_info; - //IFDBG printf(" Addrs for type_info [tag=%d]: 0x%08"PFMT64x"\n", type_val, &attr->metas->type_info); + //IFDBG printf (" Addrs for type_info [tag=%d]: 0x%08"PFMT64x"\n", type_val, &attr->metas->type_info); return attr; } -RBinJavaAttrMetas* r_bin_java_get_attr_type_by_name(ut8 *name){ +RBinJavaAttrMetas* r_bin_java_get_attr_type_by_name(ut8 *name) { RBinJavaAttrMetas* result = &RBIN_JAVA_ATTRS_METAS[R_BIN_JAVA_ATTR_TYPE_UNKNOWN_ATTR]; ut32 i = 0; - for (i = 0; i < RBIN_JAVA_ATTRS_METAS_SZ; i++){ - if (strcmp ( (const char *) name, RBIN_JAVA_ATTRS_METAS[i].name) == 0){ + for (i = 0; i < RBIN_JAVA_ATTRS_METAS_SZ; i++) { + if (strcmp ( (const char *) name, RBIN_JAVA_ATTRS_METAS[i].name) == 0) { result = &RBIN_JAVA_ATTRS_METAS[i]; break; } @@ -1048,7 +1048,7 @@ RBinJavaAttrMetas* r_bin_java_get_attr_type_by_name(ut8 *name){ } -R_API RBinJavaAttrInfo* r_bin_java_read_next_attr(RBinJavaObj *bin, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_read_next_attr(RBinJavaObj *bin, ut64 buf_offset) { RBinJavaAttrInfo* attr = NULL; ut64 sz = 0; ut8* buffer = NULL; @@ -1057,45 +1057,45 @@ R_API RBinJavaAttrInfo* r_bin_java_read_next_attr(RBinJavaObj *bin, ut64 buf_off buf_offset = bin->b->cur; // ut16 attr_idx, ut32 length of attr. - sz = r_bin_java_read_int(bin, buf_offset+2) + attr_idx_len; + sz = r_bin_java_read_int (bin, buf_offset+2) + attr_idx_len; // when reading the attr bytes, need to also // include the initial 6 bytes, which // are not included in the attribute length - IFDBG eprintf("Reading %"PFMT64d" bytes from 0x%"PFMT64x" to 0x%"PFMT64x"\n", + IFDBG eprintf ("Reading %"PFMT64d" bytes from 0x%"PFMT64x" to 0x%"PFMT64x"\n", sz, buf_offset, buf_offset+sz); - buffer = r_bin_java_get_attr_buf(bin, buf_offset, sz); - attr = r_bin_java_read_next_attr_from_buffer(buffer, sz, buf_offset); + buffer = r_bin_java_get_attr_buf (bin, buf_offset, sz); + attr = r_bin_java_read_next_attr_from_buffer (buffer, sz, buf_offset); if (attr) // advance the cursor to the correct place bin->b->cur = (buf_offset + sz); return attr; } -R_API RBinJavaAttrInfo* r_bin_java_read_next_attr_from_buffer(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_read_next_attr_from_buffer (ut8 *buffer, ut64 sz, ut64 buf_offset) { RBinJavaAttrInfo *attr = NULL; ut64 offset = 0; RBinJavaAttrMetas* type_info = NULL; - if (buffer){ + if (buffer) { ut8* name = NULL; - ut16 name_idx = R_BIN_JAVA_USHORT(buffer, offset); + ut16 name_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - sz = R_BIN_JAVA_UINT(buffer, offset); + sz = R_BIN_JAVA_UINT (buffer, offset); offset += 4; - name = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, name_idx); + name = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, name_idx); // figure the appropriate Attributes Meta, // get the meta // call its from buffer - type_info = r_bin_java_get_attr_type_by_name(name); - free(name); + type_info = r_bin_java_get_attr_type_by_name (name); + free (name); - attr = type_info->allocs->new_obj(buffer, sz, buf_offset); + attr = type_info->allocs->new_obj (buffer, sz, buf_offset); - if (attr){ + if (attr) { attr->metas->ord = (R_BIN_JAVA_GLOBAL_BIN->attr_idx++); } } @@ -1103,13 +1103,13 @@ R_API RBinJavaAttrInfo* r_bin_java_read_next_attr_from_buffer(ut8 *buffer, ut64 return attr; } -RBinJavaClass2* r_bin_java_read_class_file2(RBinJavaObj *bin, ut64 offset){ - RBinJavaClass2 *cf2 = (RBinJavaClass2 *) malloc(sizeof(RBinJavaClass2)); +RBinJavaClass2* r_bin_java_read_class_file2(RBinJavaObj *bin, ut64 offset) { + RBinJavaClass2 *cf2 = (RBinJavaClass2 *) malloc (sizeof (RBinJavaClass2)); - if (cf2){ - memset(cf2, 0, sizeof(RBinJavaClass2)); + if (cf2) { + memset (cf2, 0, sizeof (RBinJavaClass2)); IFDBG printf ("\n0x%x Offset before reading the cf2 structure\n", bin->b->cur); - r_buf_read_at (bin->b, bin->b->cur, (ut8*)cf2, 3*sizeof(ut16)); + r_buf_read_at (bin->b, bin->b->cur, (ut8*)cf2, 3*sizeof (ut16)); /* Reading the following fields: ut16 access_flags; @@ -1157,20 +1157,20 @@ static int javasm_init(RBinJavaObj *bin) { bin->cp_count = r_bin_java_swap_ushort (bin->cf.cp_count)-1; IFDBG printf ("ConstantPoolCount %d\n", bin->cp_count); bin->cp_offset = bin->b->cur; - r_list_append (bin->cp_list, r_bin_java_get_java_null_cp()); - for (ord=1,bin->cp_idx=0; bin->cp_idx < bin->cp_count; ord++, bin->cp_idx++) { + r_list_append (bin->cp_list, r_bin_java_get_java_null_cp ()); + for (ord=1,bin->cp_idx=0; bin->cp_idx < bin->cp_count; ord++, bin->cp_idx++) { obj = r_bin_java_read_next_constant_pool_item (bin, bin->b->cur); if (obj) { //IFDBG printf ("SUCCESS Read ConstantPoolItem %d\n", i); obj->metas->ord = ord; r_list_append (bin->cp_list, obj); - if (obj->tag == R_BIN_JAVA_CP_LONG || obj->tag == R_BIN_JAVA_CP_DOUBLE){ + if (obj->tag == R_BIN_JAVA_CP_LONG || obj->tag == R_BIN_JAVA_CP_DOUBLE) { //i++; ord++; bin->cp_idx++; r_list_append (bin->cp_list, &R_BIN_JAVA_NULL_TYPE); } - IFDBG ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary(obj); + IFDBG ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary (obj); } else { IFDBG printf ("Failed to read ConstantPoolItem %d\n", bin->cp_idx); } @@ -1179,8 +1179,8 @@ static int javasm_init(RBinJavaObj *bin) { bin->cp_size = bin->b->cur - bin->cp_offset; - bin->cf2 = r_bin_java_read_class_file2(bin, bin->b->cur); - if (bin->cf2 == NULL){ + bin->cf2 = r_bin_java_read_class_file2 (bin, bin->b->cur); + if (bin->cf2 == NULL) { eprintf ("Unable to read the class file info: bin->cf2 is NULL Failing?\n"); return R_FALSE; } @@ -1189,30 +1189,30 @@ static int javasm_init(RBinJavaObj *bin) { IFDBG printf ("This class: %d\n", bin->cf2->this_class); bin->interfaces_count = r_bin_java_read_short (bin, bin->b->cur); - bin->interfaces_list = r_list_new(); + bin->interfaces_list = r_list_new (); - IFDBG printf("Interfaces count: %d\n", bin->interfaces_count); + IFDBG printf ("Interfaces count: %d\n", bin->interfaces_count); bin->interfaces_offset = bin->b->cur; if (bin->interfaces_count > 0) { - for (i = 0; i < bin->fields_count; i++, bin->field_idx++){ - interfaces_obj = r_bin_java_read_next_interface_item(bin, bin->b->cur); - r_list_append(bin->interfaces_list, interfaces_obj); + for (i = 0; i < bin->fields_count; i++, bin->field_idx++) { + interfaces_obj = r_bin_java_read_next_interface_item (bin, bin->b->cur); + r_list_append (bin->interfaces_list, interfaces_obj); } } bin->interfaces_size = bin->b->cur - bin->interfaces_offset; bin->fields_count = r_bin_java_read_short (bin, bin->b->cur); - bin->fields_list = r_list_new(); + bin->fields_list = r_list_new (); bin->fields_offset = bin->b->cur; IFDBG printf ("Fields count: %d\n", bin->fields_count); if (bin->fields_count > 0) { - for (i = 0; i < bin->fields_count; i++, bin->field_idx++){ + for (i = 0; i < bin->fields_count; i++, bin->field_idx++) { - field = r_bin_java_read_next_field(bin, bin->b->cur); - if (obj){ - r_list_append(bin->fields_list, field); + field = r_bin_java_read_next_field (bin, bin->b->cur); + if (obj) { + r_list_append (bin->fields_list, field); IFDBG r_bin_java_print_field_summary(field); }else{ @@ -1233,23 +1233,24 @@ static int javasm_init(RBinJavaObj *bin) { bin->entrypoint_code_attr = NULL; if (bin->methods_count > 0) { for ( i=0; imethods_count; i++,bin->method_idx++) { - method = r_bin_java_read_next_method(bin, bin->b->cur); - if (method){ + method = r_bin_java_read_next_method (bin, bin->b->cur); + if (method) { r_list_append (bin->methods_list, method); } // Update Main, Init, or Class Init - if (method && !strcmp ( (const char *) method->name, "main")){ + if (method && !strcmp ( (const char *) method->name, "main")) { bin->main = method; // get main code attr - bin->main_code_attr = r_bin_java_get_attr_from_field(method, R_BIN_JAVA_ATTR_TYPE_CODE_ATTR, 0); + bin->main_code_attr = r_bin_java_get_attr_from_field (method, R_BIN_JAVA_ATTR_TYPE_CODE_ATTR, 0); } else if (method && (!strcmp ( (const char *) method->name, "") || !strcmp ( (const char *) method->name, "init")) ) { + IFDBG eprintf ("FOund an init function.\n"); bin->entrypoint = method; - bin->entrypoint_code_attr = r_bin_java_get_attr_from_field(method, R_BIN_JAVA_ATTR_TYPE_CODE_ATTR, 0); + bin->entrypoint_code_attr = r_bin_java_get_attr_from_field (method, R_BIN_JAVA_ATTR_TYPE_CODE_ATTR, 0); } else if (method && (!strcmp ( (const char *) method->name, "") || !strcmp ( (const char *) method->name, "cinit")) ) { bin->cf2->this_class_entrypoint = method; - bin->cf2->this_class_entrypoint_code_attr = r_bin_java_get_attr_from_field(method, R_BIN_JAVA_ATTR_TYPE_CODE_ATTR, 0); + bin->cf2->this_class_entrypoint_code_attr = r_bin_java_get_attr_from_field (method, R_BIN_JAVA_ATTR_TYPE_CODE_ATTR, 0); } IFDBG r_bin_java_print_field_summary(method); @@ -1263,9 +1264,9 @@ static int javasm_init(RBinJavaObj *bin) { if (bin->attributes_count > 0) { for ( i=0; iattributes_count; i++,bin->attributes_idx++) { - RBinJavaAttrInfo* attr = r_bin_java_read_next_attr(bin, bin->b->cur); + RBinJavaAttrInfo* attr = r_bin_java_read_next_attr (bin, bin->b->cur); if (attr) - r_list_append(bin->attributes, attr); + r_list_append (bin->attributes, attr); } } bin->methods_size = bin->b->cur - bin->methods_offset; @@ -1279,43 +1280,72 @@ R_API char* r_bin_java_get_version(RBinJavaObj* bin) { } R_API ut64 r_bin_java_get_main(RBinJavaObj* bin) { - if (bin->main_code_attr){ + if (bin->main_code_attr) { return bin->main_code_attr->info.code_attr.code_offset; } return 0; } R_API RList * r_bin_java_get_entrypoints(RBinJavaObj* bin) { - RList *ret = r_list_new (); RBinAddr *addr; + RListIter *iter = NULL, *iter_tmp=NULL; + RList *ret = r_list_new (); + RBinJavaField *fm_type; - if (bin->entrypoint_code_attr){ - if (!ret) - return NULL; - - ret->free = free; - + if (!ret) + return NULL; + + ret->free = free; + r_list_foreach_safe (bin->methods_list, iter, iter_tmp, fm_type) { addr = R_NEW (RBinAddr); - - if (addr){ - memset (addr, '\0', sizeof (RBinAddr)); - addr->offset = addr->rva = bin->entrypoint_code_attr->info.code_attr.code_offset; + if (addr) { + memset (addr, 0, sizeof (RBinAddr)); + addr->rva = addr->offset = r_bin_java_get_method_code_offset (fm_type);; } - r_list_append(ret, addr); + r_list_append (ret, addr); + } return ret; } -R_API ut64 r_bin_java_get_entrypoint(RBinJavaObj* bin) { +R_API RBinAddr * r_bin_java_get_entrypoint(RBinJavaObj* bin, int sym) { ut64 result = 0; - if (bin->entrypoint_code_attr){ - result = bin->entrypoint_code_attr->info.code_attr.code_offset; + //eprintf ("Getting the entrypoint.\n"); + ut64 found = 0; + ut64 offset = -1; + RBinAddr *ret = NULL; + + ret = R_NEW (RBinAddr); + if (!ret) + return NULL; + + switch (sym) { + case R_BIN_SYM_ENTRY: + case R_BIN_SYM_INIT: + ret->offset = r_bin_java_find_method_offset (bin, ""); + + if(ret->offset == -1) + ret->offset = r_bin_java_find_method_offset (bin, ""); + + break; + + case R_BIN_SYM_FINI: + ret->offset = -1; + break; + + case R_BIN_SYM_MAIN: + ret->offset = r_bin_java_find_method_offset (bin, "main"); + break; + + default: + ret->offset = -1; } - return result; + + return ret; } R_API ut64 r_bin_java_get_class_entrypoint(RBinJavaObj* bin) { - if (bin->cf2->this_class_entrypoint_code_attr){ + if (bin->cf2->this_class_entrypoint_code_attr) { return bin->cf2->this_class_entrypoint_code_attr->info.code_attr.code_offset; } return 0; @@ -1334,22 +1364,22 @@ typedef struct r_bin_symbol_t { } RBinSymbol; */ -RBinSymbol* r_bin_java_allocate_symbol(){ - RBinSymbol* t = (RBinSymbol *) malloc(sizeof(RBinSymbol)); +RBinSymbol* r_bin_java_allocate_symbol() { + RBinSymbol* t = (RBinSymbol *) malloc (sizeof (RBinSymbol)); if (t) - memset(t, 0, sizeof(RBinSymbol)); + memset (t, 0, sizeof (RBinSymbol)); return t; } -R_API ut64 r_bin_java_get_method_code_size(RBinJavaField *fm_type){ +R_API ut64 r_bin_java_get_method_code_size(RBinJavaField *fm_type) { RListIter *attr_iter=NULL, *attr_iter_tmp=NULL; RBinJavaAttrInfo *attr = NULL, *code_attr = NULL; ut64 sz = 0; - r_list_foreach_safe(fm_type->attributes, attr_iter, attr_iter_tmp, attr){ + r_list_foreach_safe (fm_type->attributes, attr_iter, attr_iter_tmp, attr) { if (attr->type == R_BIN_JAVA_ATTR_TYPE_CODE_ATTR) { sz = attr->info.code_attr.code_length; break; @@ -1359,12 +1389,30 @@ R_API ut64 r_bin_java_get_method_code_size(RBinJavaField *fm_type){ } -R_API ut64 r_bin_java_get_method_code_offset(RBinJavaField *fm_type){ +R_API ut64 r_bin_java_find_method_offset(RBinJavaObj *bin, char* method_name) { + RListIter *attr_iter=NULL, *attr_iter_tmp=NULL; + RBinJavaAttrInfo *attr = NULL, *code_attr = NULL; + RBinJavaField *method = NULL; + + ut64 offset = -1; + r_list_foreach_safe (bin->methods_list, attr_iter, attr_iter_tmp, method) { + if(method && !strcmp ( (const char *) method->name, method_name) ) { + offset = r_bin_java_get_method_code_offset (method); + break; + } + } + return offset; + + +} + + +R_API ut64 r_bin_java_get_method_code_offset(RBinJavaField *fm_type) { RListIter *attr_iter=NULL, *attr_iter_tmp=NULL; RBinJavaAttrInfo *attr = NULL, *code_attr = NULL; ut64 offset = 0; - r_list_foreach_safe(fm_type->attributes, attr_iter, attr_iter_tmp, attr){ + r_list_foreach_safe (fm_type->attributes, attr_iter, attr_iter_tmp, attr) { if (attr->type == R_BIN_JAVA_ATTR_TYPE_CODE_ATTR) { offset = attr->info.code_attr.code_offset; break; @@ -1379,77 +1427,77 @@ typedef struct r_bin_field_t { ut64 offset; } RBinField; */ -RBinField* r_bin_java_allocate_rbinfield(){ - RBinField* t = (RBinField *) malloc(sizeof(RBinField)); +RBinField* r_bin_java_allocate_rbinfield() { + RBinField* t = (RBinField *) malloc (sizeof (RBinField)); if (t) - memset(t, 0, sizeof(RBinField)); + memset (t, 0, sizeof (RBinField)); return t; } -R_API RBinField* r_bin_java_create_new_rbinfield_from_field(RBinJavaField *fm_type){ +R_API RBinField* r_bin_java_create_new_rbinfield_from_field(RBinJavaField *fm_type) { - RBinField *field = r_bin_java_allocate_rbinfield(); + RBinField *field = r_bin_java_allocate_rbinfield (); - if (field){ - strncpy(field->name, fm_type->name, R_BIN_SIZEOF_STRINGS); + if (field) { + strncpy (field->name, fm_type->name, R_BIN_SIZEOF_STRINGS); field->offset = fm_type->file_offset; field->visibility = fm_type->flags; } return field; } -R_API RBinSymbol* r_bin_java_create_new_symbol_from_field(RBinJavaField *fm_type){ +R_API RBinSymbol* r_bin_java_create_new_symbol_from_field(RBinJavaField *fm_type) { - RBinSymbol *sym = r_bin_java_allocate_symbol(); - if(fm_type == NULL || fm_type == &R_BIN_JAVA_NULL_TYPE){ - free(sym); + RBinSymbol *sym = r_bin_java_allocate_symbol (); + if(fm_type == NULL || fm_type == &R_BIN_JAVA_NULL_TYPE) { + free (sym); sym = NULL; } - if (sym){ - strncpy(sym->name, fm_type->name, R_BIN_SIZEOF_STRINGS); - strncpy(sym->type, fm_type->descriptor, R_BIN_SIZEOF_STRINGS); - sym->classname = r_str_dup(NULL, fm_type->class_name); + if (sym) { + strncpy (sym->name, fm_type->name, R_BIN_SIZEOF_STRINGS); + strncpy (sym->type, fm_type->descriptor, R_BIN_SIZEOF_STRINGS); + sym->classname = r_str_dup (NULL, fm_type->class_name); sym->offset = fm_type->file_offset; - sym->rva = r_bin_java_get_method_code_offset(fm_type); + sym->rva = r_bin_java_get_method_code_offset (fm_type); sym->ordinal = fm_type->metas->ord; - sym->size = r_bin_java_get_method_code_size(fm_type); + sym->size = r_bin_java_get_method_code_size (fm_type); sym->visibility = fm_type->flags; } return sym; } -R_API RBinSymbol* r_bin_java_create_new_symbol_from_ref(RBinJavaCPTypeObj *obj){ - RBinSymbol *sym = r_bin_java_allocate_symbol(); +R_API RBinSymbol* r_bin_java_create_new_symbol_from_ref(RBinJavaCPTypeObj *obj) { + RBinSymbol *sym = r_bin_java_allocate_symbol (); ut8 *class_name, *name, *type_name; if (obj == NULL || (obj->tag != R_BIN_JAVA_CP_METHODREF && - obj->tag != R_BIN_JAVA_CP_INTERFACEMETHOD_REF && - obj->tag != R_BIN_JAVA_CP_FIELDREF) ){ + obj->tag != R_BIN_JAVA_CP_INTERFACEMETHOD_REF && + obj->tag != R_BIN_JAVA_CP_FIELDREF) ) { if (sym) - free(sym); + free (sym); sym = NULL; return sym; } - if (sym){ - class_name = r_bin_java_get_name_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, obj->info.cp_method.class_idx); - name = r_bin_java_get_name_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, obj->info.cp_method.name_and_type_idx); - type_name = r_bin_java_get_name_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, obj->info.cp_method.name_and_type_idx); + if (sym) { + class_name = r_bin_java_get_name_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, obj->info.cp_method.class_idx); + name = r_bin_java_get_name_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, obj->info.cp_method.name_and_type_idx); + type_name = r_bin_java_get_name_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, obj->info.cp_method.name_and_type_idx); - if (name){ - strncpy(sym->name, name, R_BIN_SIZEOF_STRINGS); - free(name); + if (name) { + strncpy (sym->name, name, R_BIN_SIZEOF_STRINGS); + free (name); name = NULL; } - if (type_name){ - strncpy(sym->type, type_name, R_BIN_SIZEOF_STRINGS); - free(type_name); + if (type_name) { + strncpy (sym->type, type_name, R_BIN_SIZEOF_STRINGS); + free (type_name); type_name = NULL; } if (class_name) @@ -1476,21 +1524,21 @@ typedef struct r_bin_section_t { } RBinSection; */ -R_API RBinSection* r_bin_java_allocate_section(){ - RBinSection* section = (RBinSection *) malloc(sizeof(RBinSection)); +R_API RBinSection* r_bin_java_allocate_section() { + RBinSection* section = (RBinSection *) malloc (sizeof (RBinSection)); if(section) - memset(section, 0, sizeof(RBinSection)); + memset (section, 0, sizeof (RBinSection)); return section; } -R_API RList* r_bin_java_get_sections(RBinJavaObj *bin){ +R_API RList* r_bin_java_get_sections(RBinJavaObj *bin) { RBinSection* section = NULL; - RList *sections = r_list_new(); + RList *sections = r_list_new (); - if (bin->cp_count > 0){ - section = r_bin_java_allocate_section(); - if(section){ + if (bin->cp_count > 0) { + section = r_bin_java_allocate_section (); + if(section) { strcpy (section->name, "constant_pool"); section->size = bin->cp_size; section->offset = bin->cp_offset; @@ -1499,9 +1547,9 @@ R_API RList* r_bin_java_get_sections(RBinJavaObj *bin){ } section = NULL; } - if (bin->fields_count > 0){ - section = r_bin_java_allocate_section(); - if(section){ + if (bin->fields_count > 0) { + section = r_bin_java_allocate_section (); + if(section) { strcpy (section->name, "fields"); section->size = bin->fields_size; section->offset = bin->fields_offset; @@ -1510,9 +1558,9 @@ R_API RList* r_bin_java_get_sections(RBinJavaObj *bin){ } section = NULL; } - if (bin->methods_count > 0){ - section = r_bin_java_allocate_section(); - if(section){ + if (bin->methods_count > 0) { + section = r_bin_java_allocate_section (); + if(section) { strcpy (section->name, "methods"); section->size = bin->methods_size; section->offset = bin->methods_offset; @@ -1521,9 +1569,9 @@ R_API RList* r_bin_java_get_sections(RBinJavaObj *bin){ } section = NULL; } - if (bin->interfaces_count > 0){ - section = r_bin_java_allocate_section(); - if(section){ + if (bin->interfaces_count > 0) { + section = r_bin_java_allocate_section (); + if(section) { strcpy (section->name, "interfaces"); section->size = bin->interfaces_size; section->offset = bin->interfaces_offset; @@ -1533,9 +1581,9 @@ R_API RList* r_bin_java_get_sections(RBinJavaObj *bin){ section = NULL; } - if (bin->attributes_count > 0){ - section = r_bin_java_allocate_section(); - if(section){ + if (bin->attributes_count > 0) { + section = r_bin_java_allocate_section (); + if(section) { strcpy (section->name, "attributes"); section->size = bin->attributes_size; section->offset = bin->attributes_offset; @@ -1546,7 +1594,7 @@ R_API RList* r_bin_java_get_sections(RBinJavaObj *bin){ return sections; } -R_API RList* r_bin_java_enum_class_methods(RBinJavaObj *bin, ut16 class_idx){ +R_API RList* r_bin_java_enum_class_methods(RBinJavaObj *bin, ut16 class_idx) { RList* methods = r_list_new (); RListIter *iter; RBinJavaField *fm_type; @@ -1562,18 +1610,18 @@ R_API RList* r_bin_java_enum_class_methods(RBinJavaObj *bin, ut16 class_idx){ return methods; } -R_API RList* r_bin_java_enum_class_fields(RBinJavaObj *bin, ut16 class_idx){ - RList* fields = r_list_new(); +R_API RList* r_bin_java_enum_class_fields(RBinJavaObj *bin, ut16 class_idx) { + RList* fields = r_list_new (); RListIter *iter, *iter_tmp; RBinJavaField *fm_type; RBinField *field = NULL; - r_list_foreach_safe(bin->fields_list, iter, iter_tmp, fm_type){ + r_list_foreach_safe (bin->fields_list, iter, iter_tmp, fm_type) { if (fm_type) { if (fm_type && fm_type->field_ref_cp_obj - && fm_type->field_ref_cp_obj->metas->ord == class_idx){ + && fm_type->field_ref_cp_obj->metas->ord == class_idx) { - field = r_bin_java_create_new_rbinfield_from_field(fm_type); - if (field) r_list_append(fields, field); + field = r_bin_java_create_new_rbinfield_from_field (fm_type); + if (field) r_list_append (fields, field); } } @@ -1582,16 +1630,16 @@ R_API RList* r_bin_java_enum_class_fields(RBinJavaObj *bin, ut16 class_idx){ return fields; } -R_API RBinClass* r_bin_java_allocate_r_bin_class(){ +R_API RBinClass* r_bin_java_allocate_r_bin_class() { RBinClass* class_ = R_NEW0 (RBinClass); if (class_) { - //class_->methods = r_list_new(); - //class_->fields = r_list_new(); + //class_->methods = r_list_new (); + //class_->fields = r_list_new (); } return class_; } -R_API RList* r_bin_java_get_classes(RBinJavaObj *bin){ +R_API RList* r_bin_java_get_classes(RBinJavaObj *bin) { RBinSection* rclass = NULL; RList *classes = r_list_new (); RListIter *iter, *iter_tmp; @@ -1601,39 +1649,39 @@ R_API RList* r_bin_java_get_classes(RBinJavaObj *bin){ class_ = r_bin_java_allocate_r_bin_class (); class_->visibility = bin->cf2->access_flags; - class_->methods = r_bin_java_enum_class_methods(bin, bin->cf2->this_class); - class_->fields = r_bin_java_enum_class_fields(bin, bin->cf2->this_class); - class_->name = r_bin_java_get_item_name_from_bin_cp_list(bin, cp_obj); - class_->super = r_bin_java_get_name_from_bin_cp_list(bin, bin->cf2->super_class); + class_->methods = r_bin_java_enum_class_methods (bin, bin->cf2->this_class); + class_->fields = r_bin_java_enum_class_fields (bin, bin->cf2->this_class); + class_->name = r_bin_java_get_item_name_from_bin_cp_list (bin, cp_obj); + class_->super = r_bin_java_get_name_from_bin_cp_list (bin, bin->cf2->super_class); class_->index = (idx++); r_list_append (classes, class_); - r_list_foreach_safe (bin->cp_list, iter, iter_tmp, cp_obj){ + r_list_foreach_safe (bin->cp_list, iter, iter_tmp, cp_obj) { if (cp_obj && cp_obj->tag == R_BIN_JAVA_CP_CLASS && - bin->cf2->this_class != cp_obj->info.cp_class.name_idx){ + bin->cf2->this_class != cp_obj->info.cp_class.name_idx) { - class_ = r_bin_java_allocate_r_bin_class(); - class_->methods = r_bin_java_enum_class_methods(bin, cp_obj->info.cp_class.name_idx); - class_->fields = r_bin_java_enum_class_fields(bin, cp_obj->info.cp_class.name_idx); + class_ = r_bin_java_allocate_r_bin_class (); + class_->methods = r_bin_java_enum_class_methods (bin, cp_obj->info.cp_class.name_idx); + class_->fields = r_bin_java_enum_class_fields (bin, cp_obj->info.cp_class.name_idx); class_->index = idx; - class_->name = r_bin_java_get_item_name_from_bin_cp_list(bin, cp_obj); - r_list_append(classes, class_); + class_->name = r_bin_java_get_item_name_from_bin_cp_list (bin, cp_obj); + r_list_append (classes, class_); idx++; } } return classes; } -R_API RBinSymbol* r_bin_java_create_new_symbol_from_invoke_dynamic(RBinJavaCPTypeObj *obj){ +R_API RBinSymbol* r_bin_java_create_new_symbol_from_invoke_dynamic(RBinJavaCPTypeObj *obj) { RBinSymbol *sym = NULL; if (obj == NULL || (obj->tag != R_BIN_JAVA_CP_INVOKEDYNAMIC)) return sym; - return r_bin_java_create_new_symbol_from_cp_idx(obj->info.cp_invoke_dynamic.name_and_type_index); + return r_bin_java_create_new_symbol_from_cp_idx (obj->info.cp_invoke_dynamic.name_and_type_index); } -R_API RBinSymbol* r_bin_java_create_new_symbol_from_cp_idx(ut32 cp_idx) { +R_API RBinSymbol* r_bin_java_create_new_symbol_from_cp_idx (ut32 cp_idx) { RBinSymbol *sym = NULL; RBinJavaCPTypeObj *obj = r_bin_java_get_item_from_bin_cp_list ( R_BIN_JAVA_GLOBAL_BIN, cp_idx); @@ -1655,14 +1703,14 @@ R_API RBinSymbol* r_bin_java_create_new_symbol_from_cp_idx(ut32 cp_idx) { RList* r_bin_java_get_fields(RBinJavaObj* bin) { RListIter *iter = NULL, *iter_tmp=NULL; - RList *fields = r_list_new(); + RList *fields = r_list_new (); RBinField *field; RBinJavaField *fm_type; - r_list_foreach_safe(bin->fields_list, iter, iter_tmp, fm_type){ - field = r_bin_java_create_new_rbinfield_from_field(fm_type); - if(field){ - r_list_append(fields, field); + r_list_foreach_safe (bin->fields_list, iter, iter_tmp, fm_type) { + field = r_bin_java_create_new_rbinfield_from_field (fm_type); + if(field) { + r_list_append (fields, field); } } return fields; @@ -1671,75 +1719,64 @@ RList* r_bin_java_get_fields(RBinJavaObj* bin) { RList* r_bin_java_get_symbols(RBinJavaObj* bin) { RListIter *iter = NULL, *iter_tmp=NULL; - RList *symbols = r_list_new(); + RList *symbols = r_list_new (); RBinSymbol *sym; RBinJavaField *fm_type; sym = NULL; - r_list_foreach_safe(bin->methods_list, iter, iter_tmp, fm_type){ - sym = r_bin_java_create_new_symbol_from_field(fm_type); - if(sym){ - r_list_append(symbols, (void *) sym); + r_list_foreach_safe (bin->methods_list, iter, iter_tmp, fm_type) { + sym = r_bin_java_create_new_symbol_from_field (fm_type); + if(sym) { + r_list_append (symbols, (void *) sym); } - } return symbols; } -/* -typedef struct r_bin_string_t { - // TODO: rename string->name (avoid colisions) - char string[R_BIN_SIZEOF_STRINGS]; - ut64 rva; - ut64 offset; - ut64 ordinal; - ut64 size; -} RBinString; -*/ R_API RList* r_bin_java_get_strings(RBinJavaObj* bin) { - RList *strings = r_list_new(); + RList *strings = r_list_new (); RBinString *str = NULL; RListIter *iter = NULL, *iter_tmp=NULL; RBinJavaCPTypeObj *cp_obj = NULL; - r_list_foreach_safe(bin->cp_list, iter, iter_tmp, cp_obj){ + r_list_foreach_safe (bin->cp_list, iter, iter_tmp, cp_obj) { if (cp_obj && cp_obj->tag == R_BIN_JAVA_CP_UTF8) { - str = (RBinString *) malloc(sizeof(RBinString)); - if(str){ + str = (RBinString *) malloc (sizeof (RBinString)); + if(str) { str->offset = cp_obj->file_offset; str->ordinal = cp_obj->metas->ord; str->size = cp_obj->info.cp_utf8.length; strncpy ((char *) str->string, (const char *) cp_obj->info.cp_utf8.bytes, R_BIN_JAVA_MAXSTR); - r_list_append(strings, (void *) str); + r_list_append (strings, (void *) str); } } } return strings; } -R_API void* r_bin_java_free(RBinJavaObj* bin) { +R_API void* r_bin_java_free (RBinJavaObj* bin) { if (!bin) return NULL; // free up the constant pool list - r_bin_java_constant_pool_list_free(bin); + r_bin_java_constant_pool_list_free (bin); // free up the fields list - r_bin_java_fields_list_free(bin); + r_bin_java_fields_list_free (bin); // free up methods list - r_bin_java_methods_list_free(bin); + r_bin_java_methods_list_free (bin); // free up interfaces list - r_bin_java_interfaces_list_free(bin); + r_bin_java_interfaces_list_free (bin); // TODO: XXX if a class list of all inner classes // are formed then this will need to be updated if (bin->b) r_buf_free (bin->b); - if (bin->cf2) free(bin->cf2); + if (bin->cf2) free (bin->cf2); bin->b = NULL; R_BIN_JAVA_GLOBAL_BIN = NULL; free (bin); return NULL; } -R_API RBinJavaObj* r_bin_java_new(const char* file) { +R_API RBinJavaObj* r_bin_java_new (const char* file) { ut8 *buf; RBinJavaObj *bin = R_NEW0 (RBinJavaObj); bin->file = file; @@ -1767,99 +1804,99 @@ R_API RBinJavaObj* r_bin_java_new_buf(RBuffer *buf) { -R_API void r_bin_java_free_attribute_list(RList *attributes){ +R_API void r_bin_java_free_attribute_list (RList *attributes) { RBinJavaAttrInfo* attr = NULL; RListIter *attr_iter, *attr_iter_tmp = NULL; - if(attributes){ - r_list_foreach_safe(attributes, attr_iter, attr_iter_tmp, attr){ + if(attributes) { + r_list_foreach_safe (attributes, attr_iter, attr_iter_tmp, attr) { // Note the attr->type_info->delete_obj will free the attribute object - ((RBinJavaAttrMetas *) attr->metas->type_info)->allocs->delete_obj(attr); - r_list_delete(attributes, attr_iter); + ((RBinJavaAttrMetas *) attr->metas->type_info)->allocs->delete_obj (attr); + r_list_delete (attributes, attr_iter); } - r_list_free(attributes); + r_list_free (attributes); } attributes = NULL; } -R_API void r_bin_java_constant_pool_list_free(RBinJavaObj* bin){ +R_API void r_bin_java_constant_pool_list_free (RBinJavaObj* bin) { RListIter *iter, *iter_tmp; RBinJavaCPTypeObj *obj = NULL; - if (bin->cp_list){ - r_list_foreach_safe(bin->cp_list, iter, iter_tmp, obj){ - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); - r_list_delete(bin->cp_list, iter); + if (bin->cp_list) { + r_list_foreach_safe (bin->cp_list, iter, iter_tmp, obj) { + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); + r_list_delete (bin->cp_list, iter); } - r_list_free(bin->cp_list); + r_list_free (bin->cp_list); bin->cp_list = NULL; } } -R_API void r_bin_java_methods_list_free(RBinJavaObj* bin){ +R_API void r_bin_java_methods_list_free (RBinJavaObj* bin) { RBinJavaField* method = NULL; RListIter *iter=NULL, *iter_tmp = NULL; - if(bin->methods_list){ + if(bin->methods_list) { // Delete the attr entries - r_list_foreach_safe(bin->methods_list, iter, iter_tmp, method){ + r_list_foreach_safe (bin->methods_list, iter, iter_tmp, method) { if (method->descriptor) - free(method->descriptor); + free (method->descriptor); if (method->name) free (method->name); - if (method->attributes){ - r_bin_java_free_attribute_list(method->attributes); + if (method->attributes) { + r_bin_java_free_attribute_list (method->attributes); } method->attributes = NULL; - free(method); - r_list_delete(bin->methods_list, iter); + free (method); + r_list_delete (bin->methods_list, iter); } - r_list_free(bin->methods_list); + r_list_free (bin->methods_list); } bin->methods_list = NULL; } -R_API void r_bin_java_interfaces_list_free(RBinJavaObj* bin){ +R_API void r_bin_java_interfaces_list_free (RBinJavaObj* bin) { RBinJavaInterfaceInfo* obj = NULL; RListIter *iter=NULL, *iter_tmp = NULL; - if(bin->interfaces_list){ + if(bin->interfaces_list) { // Delete the attr entries - r_list_foreach_safe(bin->interfaces_list, iter, iter_tmp, obj){ - r_bin_java_interface_free(obj); - r_list_delete(bin->interfaces_list, iter); + r_list_foreach_safe (bin->interfaces_list, iter, iter_tmp, obj) { + r_bin_java_interface_free (obj); + r_list_delete (bin->interfaces_list, iter); } - r_list_free(bin->interfaces_list); + r_list_free (bin->interfaces_list); } bin->interfaces_list = NULL; } -R_API void r_bin_java_fields_list_free(RBinJavaObj* bin){ +R_API void r_bin_java_fields_list_free (RBinJavaObj* bin) { RBinJavaField* field = NULL; RListIter *iter=NULL, *iter_tmp = NULL; - if(bin->fields_list){ + if(bin->fields_list) { // Delete the attr entries - r_list_foreach_safe(bin->fields_list, iter, iter_tmp, field){ + r_list_foreach_safe (bin->fields_list, iter, iter_tmp, field) { if (field->descriptor) - free(field->descriptor); + free (field->descriptor); if (field->name) free (field->name); - if (field->attributes){ - r_bin_java_free_attribute_list(field->attributes); + if (field->attributes) { + r_bin_java_free_attribute_list (field->attributes); } field->attributes = NULL; - free(field); - r_list_delete(bin->fields_list, iter); + free (field); + r_list_delete (bin->fields_list, iter); } - r_list_free(bin->fields_list); + r_list_free (bin->fields_list); } bin->fields_list = NULL; } @@ -1867,346 +1904,346 @@ R_API void r_bin_java_fields_list_free(RBinJavaObj* bin){ // Start Free the various attribute types -R_API void r_bin_java_unknown_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_unknown_attr_free (RBinJavaAttrInfo *attr) { - if(attr){ + if(attr) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); - free(attr); + free (attr->metas); + free (attr); } } -R_API void r_bin_java_local_variable_table_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_local_variable_table_attr_free (RBinJavaAttrInfo *attr) { RBinJavaLocalVariableAttribute* lvattr = NULL; RListIter *iter = NULL, *iter_tmp = NULL; - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TABLE_ATTR){ + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TABLE_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); - if (attr->info.local_variable_table_attr.local_variable_table){ + if (attr->info.local_variable_table_attr.local_variable_table) { // Delete the attr entries - r_list_foreach_safe(attr->info.local_variable_table_attr.local_variable_table, iter, iter_tmp, lvattr){ + r_list_foreach_safe (attr->info.local_variable_table_attr.local_variable_table, iter, iter_tmp, lvattr) { if (lvattr->descriptor) - free(lvattr->descriptor); + free (lvattr->descriptor); if (lvattr->name) free (lvattr->name); - free(lvattr); - r_list_delete(attr->info.local_variable_table_attr.local_variable_table, iter); + free (lvattr); + r_list_delete (attr->info.local_variable_table_attr.local_variable_table, iter); } - r_list_free(attr->info.local_variable_table_attr.local_variable_table); + r_list_free (attr->info.local_variable_table_attr.local_variable_table); } attr->info.local_variable_table_attr.local_variable_table = NULL; - free(attr); + free (attr); } } -R_API void r_bin_java_local_variable_type_table_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_local_variable_type_table_attr_free (RBinJavaAttrInfo *attr) { RBinJavaLocalVariableTypeAttribute* lvtattr = NULL; RListIter *iter = NULL, *iter_tmp = NULL; - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TYPE_TABLE_ATTR){ + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TYPE_TABLE_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); - if (attr->info.local_variable_type_table_attr.local_variable_table){ + if (attr->info.local_variable_type_table_attr.local_variable_table) { // Delete the attr entries - r_list_foreach_safe(attr->info.local_variable_type_table_attr.local_variable_table, iter, iter_tmp, lvtattr){ + r_list_foreach_safe (attr->info.local_variable_type_table_attr.local_variable_table, iter, iter_tmp, lvtattr) { if (lvtattr->name) free (lvtattr->name); if (lvtattr->signature) free (lvtattr->signature); - free(lvtattr); - r_list_delete(attr->info.local_variable_type_table_attr.local_variable_table, iter); + free (lvtattr); + r_list_delete (attr->info.local_variable_type_table_attr.local_variable_table, iter); } - r_list_free(attr->info.local_variable_type_table_attr.local_variable_table); + r_list_free (attr->info.local_variable_type_table_attr.local_variable_table); } attr->info.local_variable_type_table_attr.local_variable_table = NULL; - free(attr); + free (attr); } } -R_API void r_bin_java_deprecated_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_deprecated_attr_free (RBinJavaAttrInfo *attr) { - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_DEPRECATED_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_DEPRECATED_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); - free(attr); + free (attr->metas); + free (attr); } } -R_API void r_bin_java_enclosing_methods_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_enclosing_methods_attr_free (RBinJavaAttrInfo *attr) { - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_ENCLOSING_METHOD_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_ENCLOSING_METHOD_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); - if (attr->info.enclosing_method_attr.class_name){ - free(attr->info.enclosing_method_attr.class_name); + if (attr->info.enclosing_method_attr.class_name) { + free (attr->info.enclosing_method_attr.class_name); } - if (attr->info.enclosing_method_attr.method_name){ - free(attr->info.enclosing_method_attr.method_name); + if (attr->info.enclosing_method_attr.method_name) { + free (attr->info.enclosing_method_attr.method_name); } - if (attr->info.enclosing_method_attr.method_descriptor){ - free(attr->info.enclosing_method_attr.method_descriptor); + if (attr->info.enclosing_method_attr.method_descriptor) { + free (attr->info.enclosing_method_attr.method_descriptor); } - free(attr); + free (attr); } } -R_API void r_bin_java_synthetic_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_synthetic_attr_free (RBinJavaAttrInfo *attr) { - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_SYNTHETIC_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_SYNTHETIC_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); - free(attr); + free (attr->metas); + free (attr); } } -R_API void r_bin_java_constant_value_attr_free(RBinJavaAttrInfo *attr){ - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_CONST_VALUE_ATTR){ +R_API void r_bin_java_constant_value_attr_free (RBinJavaAttrInfo *attr) { + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_CONST_VALUE_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); - free(attr); + free (attr->metas); + free (attr); } } -R_API void r_bin_java_line_number_table_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_line_number_table_attr_free (RBinJavaAttrInfo *attr) { RBinJavaLineNumberAttribute *lnattr; RListIter *iter = NULL, *iter_tmp = NULL; - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_LINE_NUMBER_TABLE_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_LINE_NUMBER_TABLE_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); - if (attr->info.line_number_table_attr.line_number_table){ + if (attr->info.line_number_table_attr.line_number_table) { // Delete the attr entries - r_list_foreach_safe(attr->info.line_number_table_attr.line_number_table, iter, iter_tmp, lnattr){ - free(lnattr); - r_list_delete(attr->info.line_number_table_attr.line_number_table, iter); + r_list_foreach_safe (attr->info.line_number_table_attr.line_number_table, iter, iter_tmp, lnattr) { + free (lnattr); + r_list_delete (attr->info.line_number_table_attr.line_number_table, iter); } - r_list_free(attr->info.line_number_table_attr.line_number_table); + r_list_free (attr->info.line_number_table_attr.line_number_table); } attr->info.line_number_table_attr.line_number_table = NULL; - free(attr); + free (attr); } } -R_API void r_bin_java_code_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_code_attr_free (RBinJavaAttrInfo *attr) { RBinJavaExceptionEntry *exc_entry = NULL; RBinJavaAttrInfo *_attr; RListIter *iter = NULL, *iter_tmp = NULL; - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_CODE_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_CODE_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); if (attr->info.code_attr.implicit_frame) - r_bin_java_stack_frame_free(attr->info.code_attr.implicit_frame); + r_bin_java_stack_frame_free (attr->info.code_attr.implicit_frame); - if(attr->info.code_attr.exception_table){ + if(attr->info.code_attr.exception_table) { // Delete the attr entries - r_list_foreach_safe(attr->info.code_attr.exception_table, iter, iter_tmp, exc_entry){ - free(exc_entry); - r_list_delete(attr->info.code_attr.exception_table, iter); + r_list_foreach_safe (attr->info.code_attr.exception_table, iter, iter_tmp, exc_entry) { + free (exc_entry); + r_list_delete (attr->info.code_attr.exception_table, iter); } - r_list_free(attr->info.code_attr.exception_table); + r_list_free (attr->info.code_attr.exception_table); } attr->info.code_attr.exception_table = NULL; // Delete the exception_table entries - if(attr->info.code_attr.attributes){ - r_list_foreach_safe(attr->info.code_attr.attributes, iter, iter_tmp, _attr){ + if(attr->info.code_attr.attributes) { + r_list_foreach_safe (attr->info.code_attr.attributes, iter, iter_tmp, _attr) { if(_attr->metas->type_info) - ((RBinJavaAttrMetas *) _attr->metas->type_info)->allocs->delete_obj(_attr); - r_list_delete(attr->info.code_attr.attributes, iter); + ((RBinJavaAttrMetas *) _attr->metas->type_info)->allocs->delete_obj (_attr); + r_list_delete (attr->info.code_attr.attributes, iter); } - r_list_free(attr->info.code_attr.attributes); + r_list_free (attr->info.code_attr.attributes); } attr->info.code_attr.attributes = NULL; - free(attr); + free (attr); } } -R_API void r_bin_java_exceptions_attr_free(RBinJavaAttrInfo *attr){ - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_EXCEPTIONS_ATTR){ +R_API void r_bin_java_exceptions_attr_free (RBinJavaAttrInfo *attr) { + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_EXCEPTIONS_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); if (attr->info.exceptions_attr.exception_idx_table) free (attr->info.exceptions_attr.exception_idx_table); - free(attr); + free (attr); } } -R_API void r_bin_java_inner_classes_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_inner_classes_attr_free (RBinJavaAttrInfo *attr) { RBinJavaClassesAttribute *icattr; RListIter *iter, *iter_tmp=NULL; - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_INNER_CLASSES_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_INNER_CLASSES_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); - if(attr->info.inner_classes_attr.classes){ + if(attr->info.inner_classes_attr.classes) { // Delete the classes entries - r_list_foreach_safe(attr->info.inner_classes_attr.classes, iter, iter_tmp, icattr){ - if(icattr){ - if(icattr->name) free(icattr->name); - free(icattr); + r_list_foreach_safe (attr->info.inner_classes_attr.classes, iter, iter_tmp, icattr) { + if(icattr) { + if(icattr->name) free (icattr->name); + free (icattr); } - r_list_delete(attr->info.inner_classes_attr.classes, iter); + r_list_delete (attr->info.inner_classes_attr.classes, iter); } - r_list_free(attr->info.inner_classes_attr.classes); + r_list_free (attr->info.inner_classes_attr.classes); } attr->info.inner_classes_attr.classes = NULL; - free(attr); + free (attr); } } -R_API void r_bin_java_signature_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_signature_attr_free (RBinJavaAttrInfo *attr) { - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_SIGNATURE_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_SIGNATURE_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); if (attr->info.signature_attr.signature) - free(attr->info.signature_attr.signature); - free(attr); + free (attr->info.signature_attr.signature); + free (attr); } } -R_API void r_bin_java_source_debug_attr_free(RBinJavaAttrInfo *attr){ - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_SOURCE_DEBUG_EXTENTSION_ATTR){ +R_API void r_bin_java_source_debug_attr_free (RBinJavaAttrInfo *attr) { + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_SOURCE_DEBUG_EXTENTSION_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); if (attr->info.debug_extensions.debug_extension) - free(attr->info.debug_extensions.debug_extension); + free (attr->info.debug_extensions.debug_extension); attr->info.debug_extensions.debug_extension = NULL; - free(attr); + free (attr); } } -R_API void r_bin_java_source_code_file_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_source_code_file_attr_free (RBinJavaAttrInfo *attr) { - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_SOURCE_FILE_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_SOURCE_FILE_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); - free(attr); + free (attr->metas); + free (attr); } } -R_API void r_bin_java_stack_map_table_attr_free(RBinJavaAttrInfo* attr){ +R_API void r_bin_java_stack_map_table_attr_free (RBinJavaAttrInfo* attr) { RListIter *iter = NULL, *iter_tmp = NULL; RList* ptrList = NULL; RBinJavaStackMapFrame *frame = NULL; - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_STACK_MAP_TABLE_ATTR){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_STACK_MAP_TABLE_ATTR) { if(attr->name) - free(attr->name); + free (attr->name); if (attr->metas) - free(attr->metas); + free (attr->metas); ptrList = attr->info.stack_map_table_attr.stack_map_frame_entries; - if(ptrList){ - r_list_foreach_safe(ptrList, iter, iter_tmp, frame){ + if(ptrList) { + r_list_foreach_safe (ptrList, iter, iter_tmp, frame) { if (frame) - r_bin_java_stack_frame_free(frame); - r_list_delete(ptrList, iter); + r_bin_java_stack_frame_free (frame); + r_list_delete (ptrList, iter); } - r_list_free(ptrList); + r_list_free (ptrList); } ptrList = NULL; attr->info.stack_map_table_attr.stack_map_frame_entries = NULL; - free(attr); + free (attr); } } -R_API void r_bin_java_stack_frame_free(RBinJavaStackMapFrame* obj){ +R_API void r_bin_java_stack_frame_free (RBinJavaStackMapFrame* obj) { RListIter *iter = NULL, *iter_tmp = NULL; RList* ptrList = NULL; RBinJavaVerificationObj *ver_obj = NULL; - if (obj){ + if (obj) { ptrList = obj->local_items; - if (obj->metas){ - free(obj->metas); + if (obj->metas) { + free (obj->metas); obj->metas = NULL; } - if(ptrList){ - r_list_foreach_safe(ptrList, iter, iter_tmp, ver_obj){ + if(ptrList) { + r_list_foreach_safe (ptrList, iter, iter_tmp, ver_obj) { if (ver_obj) - r_bin_java_verification_info_free(ver_obj); - r_list_delete(ptrList, iter); + r_bin_java_verification_info_free (ver_obj); + r_list_delete (ptrList, iter); } - r_list_free(ptrList); + r_list_free (ptrList); } obj->local_items = NULL; ptrList = obj->stack_items; - if(ptrList){ - r_list_foreach_safe(ptrList, iter, iter_tmp, ver_obj){ + if(ptrList) { + r_list_foreach_safe (ptrList, iter, iter_tmp, ver_obj) { if (ver_obj) - r_bin_java_verification_info_free(ver_obj); - r_list_delete(ptrList, iter); + r_bin_java_verification_info_free (ver_obj); + r_list_delete (ptrList, iter); } - r_list_free(ptrList); + r_list_free (ptrList); } obj->stack_items = NULL; ptrList = NULL; - free(obj); + free (obj); } } -R_API void r_bin_java_verification_info_free(RBinJavaVerificationObj* obj){ - if(obj){ +R_API void r_bin_java_verification_info_free (RBinJavaVerificationObj* obj) { + if(obj) { if (obj->name) - free(obj->name); - free(obj); + free (obj->name); + free (obj); } } -R_API void r_bin_java_interface_free(RBinJavaInterfaceInfo *obj){ +R_API void r_bin_java_interface_free (RBinJavaInterfaceInfo *obj) { if (obj) { if (obj->name) - free(obj->name); - free(obj); + free (obj->name); + free (obj); } } @@ -2215,72 +2252,72 @@ R_API void r_bin_java_interface_free(RBinJavaInterfaceInfo *obj){ // Start the various attibute types new -R_API ut64 r_bin_java_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_attr_calc_size (RBinJavaAttrInfo *attr) { ut64 size = 0; if (attr) - size = ((RBinJavaAttrMetas *) attr->metas->type_info)->allocs->calc_size(attr); + size = ((RBinJavaAttrMetas *) attr->metas->type_info)->allocs->calc_size (attr); return size; } -R_API ut64 r_bin_java_unknown_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_unknown_attr_calc_size(RBinJavaAttrInfo *attr) { ut64 size = 0; - if (attr){ + if (attr) { size += 6; } return size; } -R_API RBinJavaAttrInfo* r_bin_java_unknown_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ - return r_bin_java_default_attr_new(buffer, sz, buf_offset); +R_API RBinJavaAttrInfo* r_bin_java_unknown_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { + return r_bin_java_default_attr_new (buffer, sz, buf_offset); } -R_API ut64 r_bin_java_code_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_code_attr_calc_size(RBinJavaAttrInfo *attr) { RBinJavaExceptionEntry *exc_entry = NULL; RBinJavaAttrInfo *_attr = NULL; RListIter *iter, *iter_tmp; ut64 size = 0; - if (attr){ - //attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + if (attr) { + //attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); size += 6; - //attr->info.code_attr.max_stack = R_BIN_JAVA_USHORT(buffer, 0); + //attr->info.code_attr.max_stack = R_BIN_JAVA_USHORT (buffer, 0); size += 2; - //attr->info.code_attr.max_locals = R_BIN_JAVA_USHORT(buffer, 2); + //attr->info.code_attr.max_locals = R_BIN_JAVA_USHORT (buffer, 2); size += 2; - //attr->info.code_attr.code_length = R_BIN_JAVA_UINT(buffer, 4); + //attr->info.code_attr.code_length = R_BIN_JAVA_UINT (buffer, 4); size += 2; - if (attr->info.code_attr.code){ + if (attr->info.code_attr.code) { size += attr->info.code_attr.code_length; } //attr->info.code_attr.exception_table_length = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(attr->info.code_attr.exception_table, iter, iter_tmp, exc_entry){ - //exc_entry->start_pc = R_BIN_JAVA_USHORT(buffer,offset); + r_list_foreach_safe (attr->info.code_attr.exception_table, iter, iter_tmp, exc_entry) { + //exc_entry->start_pc = R_BIN_JAVA_USHORT (buffer,offset); size += 2; - //exc_entry->end_pc = R_BIN_JAVA_USHORT(buffer,offset); + //exc_entry->end_pc = R_BIN_JAVA_USHORT (buffer,offset); size += 2; - //exc_entry->handler_pc = R_BIN_JAVA_USHORT(buffer,offset); + //exc_entry->handler_pc = R_BIN_JAVA_USHORT (buffer,offset); size += 2; - //exc_entry->catch_type = R_BIN_JAVA_USHORT(buffer, offset); + //exc_entry->catch_type = R_BIN_JAVA_USHORT (buffer, offset); size += 2; } - //attr->info.code_attr.attributes_count = R_BIN_JAVA_USHORT(buffer, offset); + //attr->info.code_attr.attributes_count = R_BIN_JAVA_USHORT (buffer, offset); size += 2; if (attr->info.code_attr.attributes_count > 0) { - r_list_foreach_safe(attr->info.code_attr.attributes, iter, iter_tmp, _attr){ - size += r_bin_java_attr_calc_size(attr); + r_list_foreach_safe (attr->info.code_attr.attributes, iter, iter_tmp, _attr) { + size += r_bin_java_attr_calc_size (attr); } } } @@ -2288,14 +2325,14 @@ R_API ut64 r_bin_java_code_attr_calc_size(RBinJavaAttrInfo *attr){ } -R_API RBinJavaAttrInfo* r_bin_java_code_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_code_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { RBinJavaExceptionEntry *exc_entry = NULL; RBinJavaAttrInfo *attr = NULL, *_attr = NULL; ut32 k = 0, cur_location; ut64 offset = 0; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; if(attr == NULL) @@ -2307,94 +2344,94 @@ R_API RBinJavaAttrInfo* r_bin_java_code_attr_new(ut8 *buffer, ut64 sz, ut64 buf_ //r_buf_read_at (bin->b, offset, (ut8*)buf, 8); - attr->info.code_attr.max_stack = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.code_attr.max_stack = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.code_attr.max_locals = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.code_attr.max_locals = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.code_attr.code_length = R_BIN_JAVA_UINT(buffer, offset); + attr->info.code_attr.code_length = R_BIN_JAVA_UINT (buffer, offset); offset += 4; attr->info.code_attr.code_offset = buf_offset+offset; - attr->info.code_attr.code = (ut8* ) malloc(attr->info.code_attr.code_length); + attr->info.code_attr.code = (ut8* ) malloc (attr->info.code_attr.code_length); - if (attr->info.code_attr.code == NULL){ - eprintf("Handling Code Attributes: Unable to allocate memory (%u bytes )for a code.\n", attr->info.code_attr.code_length); + if (attr->info.code_attr.code == NULL) { + eprintf ("Handling Code Attributes: Unable to allocate memory (%u bytes )for a code.\n", attr->info.code_attr.code_length); return attr; } R_BIN_JAVA_GLOBAL_BIN->current_code_attr = attr; - memset(attr->info.code_attr.code, 0, attr->info.code_attr.code_length); + memset (attr->info.code_attr.code, 0, attr->info.code_attr.code_length); //r_buf_read_at (bin->b, bin->b->cur, attr->info.code_attr.code, attr->info.code_attr.code_length); // READ CODE - memcpy(attr->info.code_attr.code, buffer+offset, attr->info.code_attr.code_length); + memcpy (attr->info.code_attr.code, buffer+offset, attr->info.code_attr.code_length); offset += attr->info.code_attr.code_length; attr->info.code_attr.exception_table_length = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.code_attr.exception_table = r_list_new(); + attr->info.code_attr.exception_table = r_list_new (); for (k = 0; k < attr->info.code_attr.exception_table_length; k++) { cur_location = buf_offset+offset; //r_buf_read_at(bin->b, bin->b->cur, (ut8*)buf, 8); - exc_entry = (RBinJavaExceptionEntry *) malloc(sizeof(RBinJavaExceptionEntry)); - if (exc_entry == NULL){ - eprintf("Handling Code Attributes :Unable to allocate memory (%u bytes )for a new exception handler structure.\n", 8); + exc_entry = (RBinJavaExceptionEntry *) malloc (sizeof (RBinJavaExceptionEntry)); + if (exc_entry == NULL) { + eprintf ("Handling Code Attributes :Unable to allocate memory (%u bytes )for a new exception handler structure.\n", 8); break; } exc_entry->file_offset = cur_location; - exc_entry->start_pc = R_BIN_JAVA_USHORT(buffer,offset); + exc_entry->start_pc = R_BIN_JAVA_USHORT (buffer,offset); offset += 2; - exc_entry->end_pc = R_BIN_JAVA_USHORT(buffer,offset); + exc_entry->end_pc = R_BIN_JAVA_USHORT (buffer,offset); offset += 2; - exc_entry->handler_pc = R_BIN_JAVA_USHORT(buffer,offset); + exc_entry->handler_pc = R_BIN_JAVA_USHORT (buffer,offset); offset += 2; - exc_entry->catch_type = R_BIN_JAVA_USHORT(buffer, offset); + exc_entry->catch_type = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - r_list_append(attr->info.code_attr.exception_table, exc_entry); + r_list_append (attr->info.code_attr.exception_table, exc_entry); exc_entry->size = 8; } //attr->info.code_attr.attributes_count = (unsigned int)r_bin_java_read_short(bin, bin->b->cur); - attr->info.code_attr.attributes_count = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.code_attr.attributes_count = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - //IFDBG printf(" code Attributes_count: %d\n", attr->info.code_attr.attributes_count); + //IFDBG printf (" code Attributes_count: %d\n", attr->info.code_attr.attributes_count); - attr->info.code_attr.attributes = r_list_new(); + attr->info.code_attr.attributes = r_list_new (); if (attr->info.code_attr.attributes_count > 0) { - for (k = 0; k < attr->info.code_attr.attributes_count; k++){ - _attr = r_bin_java_read_next_attr_from_buffer(buffer+offset, sz-offset, buf_offset+offset); - if (_attr){ + for (k = 0; k < attr->info.code_attr.attributes_count; k++) { + _attr = r_bin_java_read_next_attr_from_buffer (buffer+offset, sz-offset, buf_offset+offset); + if (_attr) { offset += _attr->size; - r_list_append(attr->info.code_attr.attributes, _attr); + r_list_append (attr->info.code_attr.attributes, _attr); } - if (_attr && _attr->type == R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TABLE_ATTR){ - IFDBG printf("Parsed the LocalVariableTable, preparing the implicit mthod frame.\n"); + if (_attr && _attr->type == R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TABLE_ATTR) { + IFDBG printf ("Parsed the LocalVariableTable, preparing the implicit mthod frame.\n"); IFDBG r_bin_java_print_attr_summary(_attr); - attr->info.code_attr.implicit_frame = r_bin_java_build_stack_frame_from_local_variable_table(R_BIN_JAVA_GLOBAL_BIN, _attr); + attr->info.code_attr.implicit_frame = r_bin_java_build_stack_frame_from_local_variable_table (R_BIN_JAVA_GLOBAL_BIN, _attr); IFDBG r_bin_java_print_stack_map_frame_summary(attr->info.code_attr.implicit_frame); } } } - if (attr->info.code_attr.implicit_frame == NULL){ + if (attr->info.code_attr.implicit_frame == NULL) { // build a default implicit_frame - attr->info.code_attr.implicit_frame = r_bin_java_default_stack_frame(); + attr->info.code_attr.implicit_frame = r_bin_java_default_stack_frame (); } attr->size = offset; @@ -2403,16 +2440,16 @@ R_API RBinJavaAttrInfo* r_bin_java_code_attr_new(ut8 *buffer, ut64 sz, ut64 buf_ -R_API RBinJavaAttrInfo* r_bin_java_constant_value_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_constant_value_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { ut64 offset = 0; RBinJavaAttrInfo* attr = NULL; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr){ + if (attr) { attr->type = R_BIN_JAVA_ATTR_TYPE_CONST_VALUE_ATTR; - attr->info.constant_value_attr.constantvalue_idx = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.constant_value_attr.constantvalue_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; attr->size = offset; } @@ -2420,10 +2457,10 @@ R_API RBinJavaAttrInfo* r_bin_java_constant_value_attr_new(ut8 *buffer, ut64 sz, return attr; } -R_API ut64 r_bin_java_constant_value_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_constant_value_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; - if (attr){ + if (attr) { size = 6; size += 2; } @@ -2432,14 +2469,14 @@ R_API ut64 r_bin_java_constant_value_attr_calc_size(RBinJavaAttrInfo* attr){ -R_API RBinJavaAttrInfo* r_bin_java_deprecated_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_deprecated_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { RBinJavaAttrInfo* attr = NULL; ut64 offset = 0; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr){ + if (attr) { attr->type = R_BIN_JAVA_ATTR_TYPE_DEPRECATED_ATTR; attr->size = offset; } @@ -2448,10 +2485,10 @@ R_API RBinJavaAttrInfo* r_bin_java_deprecated_attr_new(ut8 *buffer, ut64 sz, ut6 return attr; } -R_API ut64 r_bin_java_deprecated_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_deprecated_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; - if (attr){ + if (attr) { size = 6; } //IFDBG r_bin_java_print_deprecated_attr_summary(attr); @@ -2459,29 +2496,29 @@ R_API ut64 r_bin_java_deprecated_attr_calc_size(RBinJavaAttrInfo* attr){ } -R_API RBinJavaAttrInfo* r_bin_java_signature_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_signature_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { ut64 offset = 0; RBinJavaAttrInfo* attr = NULL; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf allocation fail return attr; } attr->type = R_BIN_JAVA_ATTR_TYPE_SOURCE_FILE_ATTR; - attr->info.source_file_attr.sourcefile_idx = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.source_file_attr.sourcefile_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.signature_attr.signature_idx = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.signature_attr.signature_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.signature_attr.signature = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, attr->info.signature_attr.signature_idx); + attr->info.signature_attr.signature = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, attr->info.signature_attr.signature_idx); if (attr->info.signature_attr.signature == NULL) - eprintf("r_bin_java_signature_attr_new: Unable to resolve the Signature UTF8 String Index: 0x%02x\n", attr->info.signature_attr.signature_idx); + eprintf ("r_bin_java_signature_attr_new: Unable to resolve the Signature UTF8 String Index: 0x%02x\n", attr->info.signature_attr.signature_idx); attr->size = offset; @@ -2489,96 +2526,96 @@ R_API RBinJavaAttrInfo* r_bin_java_signature_attr_new(ut8 *buffer, ut64 sz, ut64 return attr; } -R_API ut64 r_bin_java_signature_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_signature_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf allocation fail return size; } size += 6; - //attr->info.source_file_attr.sourcefile_idx = R_BIN_JAVA_USHORT(buffer, offset); + //attr->info.source_file_attr.sourcefile_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //attr->info.signature_attr.signature_idx = R_BIN_JAVA_USHORT(buffer, offset); + //attr->info.signature_attr.signature_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; return size; } -R_API RBinJavaAttrInfo* r_bin_java_enclosing_methods_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_enclosing_methods_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { ut64 offset = 0; RBinJavaAttrInfo* attr = NULL; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf return attr; } attr->type = R_BIN_JAVA_ATTR_TYPE_ENCLOSING_METHOD_ATTR; - attr->info.enclosing_method_attr.class_idx = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.enclosing_method_attr.class_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.enclosing_method_attr.method_idx = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.enclosing_method_attr.method_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.enclosing_method_attr.class_name = r_bin_java_get_name_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, attr->info.enclosing_method_attr.class_idx); + attr->info.enclosing_method_attr.class_name = r_bin_java_get_name_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, attr->info.enclosing_method_attr.class_idx); if (attr->info.enclosing_method_attr.class_name == NULL) - eprintf("Could not resolve enclosing class name for the enclosed method.\n"); + eprintf ("Could not resolve enclosing class name for the enclosed method.\n"); - attr->info.enclosing_method_attr.method_name = r_bin_java_get_name_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, attr->info.enclosing_method_attr.method_idx); + attr->info.enclosing_method_attr.method_name = r_bin_java_get_name_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, attr->info.enclosing_method_attr.method_idx); if (attr->info.enclosing_method_attr.class_name == NULL) - eprintf("Could not resolve method descriptor for the enclosed method.\n"); + eprintf ("Could not resolve method descriptor for the enclosed method.\n"); - attr->info.enclosing_method_attr.method_descriptor = r_bin_java_get_desc_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, attr->info.enclosing_method_attr.method_idx); + attr->info.enclosing_method_attr.method_descriptor = r_bin_java_get_desc_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, attr->info.enclosing_method_attr.method_idx); if (attr->info.enclosing_method_attr.method_name == NULL) - eprintf("Could not resolve method name for the enclosed method.\n"); + eprintf ("Could not resolve method name for the enclosed method.\n"); attr->size = offset; return attr; } -R_API ut64 r_bin_java_enclosing_methods_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_enclosing_methods_attr_calc_size(RBinJavaAttrInfo *attr) { ut64 size = 0; - if (attr){ + if (attr) { size += 6; - //attr->info.enclosing_method_attr.class_idx = R_BIN_JAVA_USHORT(buffer, offset); + //attr->info.enclosing_method_attr.class_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //attr->info.enclosing_method_attr.method_idx = R_BIN_JAVA_USHORT(buffer, offset); + //attr->info.enclosing_method_attr.method_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; } return size; } -R_API RBinJavaAttrInfo* r_bin_java_exceptions_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_exceptions_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0, offset = 0; RBinJavaAttrInfo* attr = NULL; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf return attr; } attr->type = R_BIN_JAVA_ATTR_TYPE_LINE_NUMBER_TABLE_ATTR; - attr->info.exceptions_attr.number_of_exceptions = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.exceptions_attr.number_of_exceptions = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.exceptions_attr.exception_idx_table = (ut16 *) malloc( sizeof(ut16)* attr->info.exceptions_attr.number_of_exceptions); + attr->info.exceptions_attr.exception_idx_table = (ut16 *) malloc ( sizeof (ut16)* attr->info.exceptions_attr.number_of_exceptions); - for (i = 0; i < attr->info.exceptions_attr.number_of_exceptions; i++){ - attr->info.exceptions_attr.exception_idx_table[i] = R_BIN_JAVA_USHORT(buffer, offset); + for (i = 0; i < attr->info.exceptions_attr.number_of_exceptions; i++) { + attr->info.exceptions_attr.exception_idx_table[i] = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; } attr->size = offset; @@ -2586,12 +2623,12 @@ R_API RBinJavaAttrInfo* r_bin_java_exceptions_attr_new(ut8 *buffer, ut64 sz, ut6 return attr; } -R_API ut64 r_bin_java_exceptions_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_exceptions_attr_calc_size(RBinJavaAttrInfo *attr) { ut64 size = 0, i = 0; - if (attr){ + if (attr) { size += 6; - for (i = 0; i < attr->info.exceptions_attr.number_of_exceptions; i++){ - //attr->info.exceptions_attr.exception_idx_table[i] = R_BIN_JAVA_USHORT(buffer, offset); + for (i = 0; i < attr->info.exceptions_attr.number_of_exceptions; i++) { + //attr->info.exceptions_attr.exception_idx_table[i] = R_BIN_JAVA_USHORT (buffer, offset); size += 2; } @@ -2601,7 +2638,7 @@ R_API ut64 r_bin_java_exceptions_attr_calc_size(RBinJavaAttrInfo *attr){ -R_API RBinJavaAttrInfo* r_bin_java_inner_classes_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_inner_classes_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { RBinJavaClassesAttribute *icattr; RBinJavaAttrInfo *attr = NULL; @@ -2609,51 +2646,51 @@ R_API RBinJavaAttrInfo* r_bin_java_inner_classes_attr_new(ut8* buffer, ut64 sz, ut32 i = 0; ut64 offset = 0, cur_location; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf return attr; } attr->type = R_BIN_JAVA_ATTR_TYPE_INNER_CLASSES_ATTR; - attr->info.inner_classes_attr.number_of_classes = R_BIN_JAVA_USHORT(buffer, offset); - attr->info.inner_classes_attr.classes = r_list_new(); + attr->info.inner_classes_attr.number_of_classes = R_BIN_JAVA_USHORT (buffer, offset); + attr->info.inner_classes_attr.classes = r_list_new (); - for(i = 0; i < attr->info.inner_classes_attr.number_of_classes; i++){ + for(i = 0; i < attr->info.inner_classes_attr.number_of_classes; i++) { cur_location = buf_offset + offset; - icattr = (RBinJavaClassesAttribute*) malloc(sizeof(RBinJavaClassesAttribute)); - if (icattr){ - memset(icattr, 0, sizeof(RBinJavaClassesAttribute)); + icattr = (RBinJavaClassesAttribute*) malloc (sizeof (RBinJavaClassesAttribute)); + if (icattr) { + memset (icattr, 0, sizeof (RBinJavaClassesAttribute)); }else{ - eprintf("Handling Inner Classes Attributes :Unable to allocate memory (%lu bytes )for a new exception handler structure.\n", sizeof(RBinJavaLocalVariableAttribute)); + eprintf ("Handling Inner Classes Attributes :Unable to allocate memory (%lu bytes )for a new exception handler structure.\n", sizeof (RBinJavaLocalVariableAttribute)); break; } - icattr->inner_class_info_idx = R_BIN_JAVA_USHORT(buffer, offset); + icattr->inner_class_info_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - icattr->outer_class_info_idx = R_BIN_JAVA_USHORT(buffer, offset); + icattr->outer_class_info_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - icattr->inner_name_idx = R_BIN_JAVA_USHORT(buffer, offset); + icattr->inner_name_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - icattr->inner_class_access_flags = R_BIN_JAVA_USHORT(buffer, offset); + icattr->inner_class_access_flags = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; icattr->file_offset = cur_location; icattr->size = 8; - icattr->name = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, icattr->inner_name_idx); - if(icattr->name == NULL){ + icattr->name = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, icattr->inner_name_idx); + if(icattr->name == NULL) { icattr->name = r_str_dup (NULL, "NULL"); - eprintf("r_bin_java_inner_classes_attr: Unable to find the name for %d index.\n", icattr->inner_name_idx); + eprintf ("r_bin_java_inner_classes_attr: Unable to find the name for %d index.\n", icattr->inner_name_idx); } - r_list_append(attr->info.inner_classes_attr.classes, (void *) icattr); + r_list_append (attr->info.inner_classes_attr.classes, (void *) icattr); } attr->size = offset; @@ -2661,28 +2698,28 @@ R_API RBinJavaAttrInfo* r_bin_java_inner_classes_attr_new(ut8* buffer, ut64 sz, return attr; } -R_API ut64 r_bin_java_inner_class_attr_calc_size(RBinJavaClassesAttribute *icattr){ +R_API ut64 r_bin_java_inner_class_attr_calc_size(RBinJavaClassesAttribute *icattr) { ut64 size = 0; - if (icattr){ + if (icattr) { - //icattr->inner_class_info_idx = R_BIN_JAVA_USHORT(buffer, offset); + //icattr->inner_class_info_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //icattr->outer_class_info_idx = R_BIN_JAVA_USHORT(buffer, offset); + //icattr->outer_class_info_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //icattr->inner_name_idx = R_BIN_JAVA_USHORT(buffer, offset); + //icattr->inner_name_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //icattr->inner_class_access_flags = R_BIN_JAVA_USHORT(buffer, offset); + //icattr->inner_class_access_flags = R_BIN_JAVA_USHORT (buffer, offset); size += 2; } return size; } -R_API ut64 r_bin_java_inner_classes_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_inner_classes_attr_calc_size(RBinJavaAttrInfo *attr) { ut64 size = 0; RListIter *iter, *iter_tmp; RBinJavaClassesAttribute *icattr = NULL; @@ -2691,53 +2728,53 @@ R_API ut64 r_bin_java_inner_classes_attr_calc_size(RBinJavaAttrInfo *attr){ return size; size += 6; - r_list_foreach_safe(attr->info.inner_classes_attr.classes, iter, iter_tmp, icattr){ - size += r_bin_java_inner_class_attr_calc_size(icattr); + r_list_foreach_safe (attr->info.inner_classes_attr.classes, iter, iter_tmp, icattr) { + size += r_bin_java_inner_class_attr_calc_size (icattr); } return size; } -R_API RBinJavaAttrInfo* r_bin_java_line_number_table_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_line_number_table_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { RBinJavaLineNumberAttribute *lnattr; RBinJavaAttrInfo *attr = NULL; ut32 i = 0; ut64 cur_location, offset = 0; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO printf return attr; } attr->type = R_BIN_JAVA_ATTR_TYPE_LINE_NUMBER_TABLE_ATTR; - attr->info.line_number_table_attr.line_number_table_length = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.line_number_table_attr.line_number_table_length = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.line_number_table_attr.line_number_table = r_list_new(); + attr->info.line_number_table_attr.line_number_table = r_list_new (); - for(i = 0; i < attr->info.line_number_table_attr.line_number_table_length; i++){ + for(i = 0; i < attr->info.line_number_table_attr.line_number_table_length; i++) { cur_location = buf_offset+offset; - lnattr = (RBinJavaLineNumberAttribute*) malloc(sizeof(RBinJavaLineNumberAttribute)); - if (lnattr){ - memset(lnattr, 0, sizeof(RBinJavaLineNumberAttribute)); + lnattr = (RBinJavaLineNumberAttribute*) malloc (sizeof (RBinJavaLineNumberAttribute)); + if (lnattr) { + memset (lnattr, 0, sizeof (RBinJavaLineNumberAttribute)); }else{ - eprintf("Handling Local Variable Table Attributes :Unable to allocate memory (%lu bytes) for a new exception handler structure.\n", sizeof(RBinJavaLocalVariableAttribute)); + eprintf ("Handling Local Variable Table Attributes :Unable to allocate memory (%lu bytes) for a new exception handler structure.\n", sizeof (RBinJavaLocalVariableAttribute)); break; } - lnattr->start_pc = R_BIN_JAVA_USHORT(buffer, offset); + lnattr->start_pc = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - lnattr->line_number = R_BIN_JAVA_USHORT(buffer, offset); + lnattr->line_number = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; lnattr->file_offset = cur_location; lnattr->size = 4; - r_list_append(attr->info.line_number_table_attr.line_number_table, lnattr); + r_list_append (attr->info.line_number_table_attr.line_number_table, lnattr); } attr->size = offset; @@ -2745,7 +2782,7 @@ R_API RBinJavaAttrInfo* r_bin_java_line_number_table_attr_new(ut8 *buffer, ut64 return attr; } -R_API ut64 r_bin_java_line_number_table_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_line_number_table_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; RBinJavaLineNumberAttribute *lnattr; RListIter *iter, *iter_tmp; @@ -2754,45 +2791,45 @@ R_API ut64 r_bin_java_line_number_table_attr_calc_size(RBinJavaAttrInfo* attr){ return size; size += 6; - r_list_foreach_safe(attr->info.line_number_table_attr.line_number_table, iter, iter_tmp, lnattr){ - //lnattr->start_pc = R_BIN_JAVA_USHORT(buffer, offset); + r_list_foreach_safe (attr->info.line_number_table_attr.line_number_table, iter, iter_tmp, lnattr) { + //lnattr->start_pc = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //lnattr->line_number = R_BIN_JAVA_USHORT(buffer, offset); + //lnattr->line_number = R_BIN_JAVA_USHORT (buffer, offset); size += 2; } return size; } -R_API RBinJavaAttrInfo* r_bin_java_source_debug_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_source_debug_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut64 offset = 0; RBinJavaAttrInfo *attr = NULL; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf bad allocation return attr; } attr->type = R_BIN_JAVA_ATTR_TYPE_SOURCE_DEBUG_EXTENTSION_ATTR; - if (attr->length == 0){ - eprintf("r_bin_java_source_debug_attr_new: Attempting to allocate 0 bytes for debug_extension.\n"); + if (attr->length == 0) { + eprintf ("r_bin_java_source_debug_attr_new: Attempting to allocate 0 bytes for debug_extension.\n"); attr->info.debug_extensions.debug_extension = NULL; return attr; - }else if ((attr->length+offset) > sz){ - eprintf("r_bin_java_source_debug_attr_new: Expected %d bytes got %lld bytes for debug_extension.\n", attr->length, (offset + sz)); + }else if ((attr->length+offset) > sz) { + eprintf ("r_bin_java_source_debug_attr_new: Expected %d bytes got %lld bytes for debug_extension.\n", attr->length, (offset + sz)); } - attr->info.debug_extensions.debug_extension = (ut8 *) malloc(attr->length); + attr->info.debug_extensions.debug_extension = (ut8 *) malloc (attr->length); if (attr->info.debug_extensions.debug_extension && (attr->length > (sz-offset)) ) { - memcpy(attr->info.debug_extensions.debug_extension, buffer+offset, sz-offset); + memcpy (attr->info.debug_extensions.debug_extension, buffer+offset, sz-offset); }else if (attr->info.debug_extensions.debug_extension) { - memcpy(attr->info.debug_extensions.debug_extension, buffer+offset, attr->length); + memcpy (attr->info.debug_extensions.debug_extension, buffer+offset, attr->length); }else{ - eprintf("r_bin_java_source_debug_attr_new: Unable to allocated the data for the debug_extension.\n"); + eprintf ("r_bin_java_source_debug_attr_new: Unable to allocated the data for the debug_extension.\n"); } offset += attr->length; @@ -2801,48 +2838,48 @@ R_API RBinJavaAttrInfo* r_bin_java_source_debug_attr_new(ut8* buffer, ut64 sz, u } -R_API ut64 r_bin_java_source_debug_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_source_debug_attr_calc_size(RBinJavaAttrInfo *attr) { ut64 size = 0; - if (attr == NULL){ + if (attr == NULL) { return size; } size += 6; - if (attr->info.debug_extensions.debug_extension){ + if (attr->info.debug_extensions.debug_extension) { size += attr->length; } return size; } -R_API ut64 r_bin_java_local_variable_table_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_local_variable_table_attr_calc_size(RBinJavaAttrInfo *attr) { ut64 size = 0; RListIter *iter, *iter_tmp; RBinJavaLocalVariableAttribute* lvattr = NULL; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf return size; } size += 6; - //attr->info.local_variable_table_attr.table_length = R_BIN_JAVA_USHORT(buffer, offset); + //attr->info.local_variable_table_attr.table_length = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(attr->info.local_variable_table_attr.local_variable_table, iter, iter_tmp, lvattr){ - //lvattr->start_pc = R_BIN_JAVA_USHORT(buffer,offset); + r_list_foreach_safe (attr->info.local_variable_table_attr.local_variable_table, iter, iter_tmp, lvattr) { + //lvattr->start_pc = R_BIN_JAVA_USHORT (buffer,offset); size += 2; - //lvattr->length = R_BIN_JAVA_USHORT(buffer,offset); + //lvattr->length = R_BIN_JAVA_USHORT (buffer,offset); size += 2; - //lvattr->name_idx = R_BIN_JAVA_USHORT(buffer,offset); + //lvattr->name_idx = R_BIN_JAVA_USHORT (buffer,offset); size += 2; - //lvattr->descriptor_idx = R_BIN_JAVA_USHORT(buffer,offset); + //lvattr->descriptor_idx = R_BIN_JAVA_USHORT (buffer,offset); size += 2; - //lvattr->index = R_BIN_JAVA_USHORT(buffer,offset); + //lvattr->index = R_BIN_JAVA_USHORT (buffer,offset); size += 2; } return size; @@ -2850,15 +2887,15 @@ R_API ut64 r_bin_java_local_variable_table_attr_calc_size(RBinJavaAttrInfo *attr } -R_API RBinJavaAttrInfo* r_bin_java_local_variable_table_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_local_variable_table_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { RBinJavaAttrInfo *attr = NULL; RBinJavaLocalVariableAttribute* lvattr; ut64 cur_location = 0, offset = 0; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf return attr; } @@ -2866,55 +2903,55 @@ R_API RBinJavaAttrInfo* r_bin_java_local_variable_table_attr_new(ut8* buffer, ut ut32 i = 0; attr->type = R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TABLE_ATTR; - attr->info.local_variable_table_attr.table_length = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.local_variable_table_attr.table_length = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.local_variable_table_attr.local_variable_table = r_list_new(); + attr->info.local_variable_table_attr.local_variable_table = r_list_new (); - for(i = 0; i < attr->info.local_variable_table_attr.table_length; i++){ + for(i = 0; i < attr->info.local_variable_table_attr.table_length; i++) { cur_location = buf_offset + offset; - lvattr = (RBinJavaLocalVariableAttribute*) malloc(sizeof(RBinJavaLocalVariableAttribute)); - if (lvattr){ - memset(lvattr, 0, sizeof(RBinJavaLocalVariableAttribute)); + lvattr = (RBinJavaLocalVariableAttribute*) malloc (sizeof (RBinJavaLocalVariableAttribute)); + if (lvattr) { + memset (lvattr, 0, sizeof (RBinJavaLocalVariableAttribute)); }else{ - eprintf("Handling Local Variable Table Attributes :Unable to allocate memory (%lu bytes )for a new exception handler structure.\n", sizeof(RBinJavaLocalVariableAttribute)); + eprintf ("Handling Local Variable Table Attributes :Unable to allocate memory (%lu bytes )for a new exception handler structure.\n", sizeof (RBinJavaLocalVariableAttribute)); break; } - lvattr->start_pc = R_BIN_JAVA_USHORT(buffer,offset); + lvattr->start_pc = R_BIN_JAVA_USHORT (buffer,offset); offset += 2; - lvattr->length = R_BIN_JAVA_USHORT(buffer,offset); + lvattr->length = R_BIN_JAVA_USHORT (buffer,offset); offset += 2; - lvattr->name_idx = R_BIN_JAVA_USHORT(buffer,offset); + lvattr->name_idx = R_BIN_JAVA_USHORT (buffer,offset); offset += 2; - lvattr->descriptor_idx = R_BIN_JAVA_USHORT(buffer,offset); + lvattr->descriptor_idx = R_BIN_JAVA_USHORT (buffer,offset); offset += 2; - lvattr->index = R_BIN_JAVA_USHORT(buffer,offset); + lvattr->index = R_BIN_JAVA_USHORT (buffer,offset); offset += 2; lvattr->file_offset = cur_location; - lvattr->name = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, lvattr->name_idx); + lvattr->name = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, lvattr->name_idx); lvattr->size = 10; - if(lvattr->name == NULL){ + if(lvattr->name == NULL) { lvattr->name = r_str_dup (NULL, "NULL"); - eprintf("r_bin_java_local_variable_table_attr_new: Unable to find the name for %d index.\n", lvattr->name_idx); + eprintf ("r_bin_java_local_variable_table_attr_new: Unable to find the name for %d index.\n", lvattr->name_idx); } - lvattr->descriptor = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, lvattr->descriptor_idx); - if(lvattr->descriptor == NULL){ + lvattr->descriptor = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, lvattr->descriptor_idx); + if(lvattr->descriptor == NULL) { lvattr->descriptor = r_str_dup (NULL, "NULL"); - eprintf("r_bin_java_local_variable_table_attr_new: Unable to find the descriptor for %d index.\n", lvattr->descriptor_idx); + eprintf ("r_bin_java_local_variable_table_attr_new: Unable to find the descriptor for %d index.\n", lvattr->descriptor_idx); } - r_list_append(attr->info.local_variable_table_attr.local_variable_table, lvattr); + r_list_append (attr->info.local_variable_table_attr.local_variable_table, lvattr); } attr->size = offset; @@ -2922,30 +2959,30 @@ R_API RBinJavaAttrInfo* r_bin_java_local_variable_table_attr_new(ut8* buffer, ut return attr; } -R_API ut64 r_bin_java_local_variable_type_table_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_local_variable_type_table_attr_calc_size(RBinJavaAttrInfo *attr) { RBinJavaLocalVariableTypeAttribute* lvattr; RListIter *iter, *iter_tmp; ut64 size = 0; - if (attr){ + if (attr) { size += 6; - // attr->info.local_variable_type_table_attr.table_length = R_BIN_JAVA_USHORT(buffer, offset); + // attr->info.local_variable_type_table_attr.table_length = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(attr->info.local_variable_type_table_attr.local_variable_table, iter, iter_tmp, lvattr){ - //lvattr->start_pc = R_BIN_JAVA_USHORT(buffer, offset); + r_list_foreach_safe (attr->info.local_variable_type_table_attr.local_variable_table, iter, iter_tmp, lvattr) { + //lvattr->start_pc = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //lvattr->length = R_BIN_JAVA_USHORT(buffer, offset); + //lvattr->length = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //lvattr->name_idx = R_BIN_JAVA_USHORT(buffer, offset); + //lvattr->name_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //lvattr->signature_idx = R_BIN_JAVA_USHORT(buffer, offset); + //lvattr->signature_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //lvattr->index = R_BIN_JAVA_USHORT(buffer, offset); + //lvattr->index = R_BIN_JAVA_USHORT (buffer, offset); size += 2; } @@ -2954,16 +2991,16 @@ R_API ut64 r_bin_java_local_variable_type_table_attr_calc_size(RBinJavaAttrInfo } -R_API RBinJavaAttrInfo* r_bin_java_local_variable_type_table_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_local_variable_type_table_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { RBinJavaLocalVariableTypeAttribute* lvattr; RBinJavaAttrInfo* attr = NULL; ut64 offset = 0; ut32 i = 0; - attr = r_bin_java_default_attr_new(buffer, sz, offset); + attr = r_bin_java_default_attr_new (buffer, sz, offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf return attr; } @@ -2971,55 +3008,55 @@ R_API RBinJavaAttrInfo* r_bin_java_local_variable_type_table_attr_new(ut8* buffe attr->type = R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TYPE_TABLE_ATTR; - attr->info.local_variable_type_table_attr.table_length = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.local_variable_type_table_attr.table_length = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.local_variable_type_table_attr.local_variable_table = r_list_new(); + attr->info.local_variable_type_table_attr.local_variable_table = r_list_new (); - for(i = 0; i < attr->info.local_variable_type_table_attr.table_length; i++){ + for(i = 0; i < attr->info.local_variable_type_table_attr.table_length; i++) { ut64 cur_location = buf_offset + offset; - lvattr = (RBinJavaLocalVariableTypeAttribute*) malloc(sizeof(RBinJavaLocalVariableTypeAttribute)); - if (lvattr){ - memset(lvattr, 0, sizeof(RBinJavaLocalVariableTypeAttribute)); + lvattr = (RBinJavaLocalVariableTypeAttribute*) malloc (sizeof (RBinJavaLocalVariableTypeAttribute)); + if (lvattr) { + memset (lvattr, 0, sizeof (RBinJavaLocalVariableTypeAttribute)); }else{ - eprintf("Handling Local Variable Table Attributes :Unable to allocate memory (%lu bytes )for a new exception handler structure.\n", sizeof(RBinJavaLocalVariableAttribute)); + eprintf ("Handling Local Variable Table Attributes :Unable to allocate memory (%lu bytes )for a new exception handler structure.\n", sizeof (RBinJavaLocalVariableAttribute)); break; } - lvattr->start_pc = R_BIN_JAVA_USHORT(buffer, offset); + lvattr->start_pc = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - lvattr->length = R_BIN_JAVA_USHORT(buffer, offset); + lvattr->length = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - lvattr->name_idx = R_BIN_JAVA_USHORT(buffer, offset); + lvattr->name_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - lvattr->signature_idx = R_BIN_JAVA_USHORT(buffer, offset); + lvattr->signature_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - lvattr->index = R_BIN_JAVA_USHORT(buffer, offset); + lvattr->index = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; lvattr->file_offset = cur_location; - lvattr->name = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, lvattr->name_idx); + lvattr->name = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, lvattr->name_idx); lvattr->size = 10; - if(lvattr->name == NULL){ + if(lvattr->name == NULL) { lvattr->name = r_str_dup (NULL, "NULL"); - eprintf("r_bin_java_local_variable_type_table_attr_new: Unable to find the name for %d index.\n", lvattr->name_idx); + eprintf ("r_bin_java_local_variable_type_table_attr_new: Unable to find the name for %d index.\n", lvattr->name_idx); } - lvattr->signature = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, lvattr->signature_idx); - if(lvattr->signature == NULL){ + lvattr->signature = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, lvattr->signature_idx); + if(lvattr->signature == NULL) { lvattr->signature = r_str_dup (NULL, "NULL"); - eprintf("r_bin_java_local_variable_type_table_attr_new: Unable to find the descriptor for %d index.\n", lvattr->signature_idx); + eprintf ("r_bin_java_local_variable_type_table_attr_new: Unable to find the descriptor for %d index.\n", lvattr->signature_idx); } - r_list_append(attr->info.local_variable_type_table_attr.local_variable_table, lvattr); + r_list_append (attr->info.local_variable_type_table_attr.local_variable_table, lvattr); } //IFDBG r_bin_java_print_local_variable_type_table_attr_summary(attr); @@ -3027,19 +3064,19 @@ R_API RBinJavaAttrInfo* r_bin_java_local_variable_type_table_attr_new(ut8* buffe return attr; } -R_API RBinJavaAttrInfo* r_bin_java_source_code_file_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_source_code_file_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { ut64 offset = 0; RBinJavaAttrInfo* attr = NULL; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf allocation fail return attr; } attr->type = R_BIN_JAVA_ATTR_TYPE_SOURCE_FILE_ATTR; - attr->info.source_file_attr.sourcefile_idx = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.source_file_attr.sourcefile_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; attr->size = offset; //IFDBG r_bin_java_print_source_code_file_attr_summary(attr); @@ -3047,9 +3084,9 @@ R_API RBinJavaAttrInfo* r_bin_java_source_code_file_attr_new(ut8 *buffer, ut64 s } -R_API ut64 r_bin_java_source_code_file_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_source_code_file_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf allocation fail return size; } @@ -3058,11 +3095,11 @@ R_API ut64 r_bin_java_source_code_file_attr_calc_size(RBinJavaAttrInfo* attr){ } -R_API RBinJavaAttrInfo* r_bin_java_synthetic_attr_new(ut8 *buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_synthetic_attr_new (ut8 *buffer, ut64 sz, ut64 buf_offset) { ut64 offset = 0; RBinJavaAttrInfo* attr = NULL; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; attr->type = R_BIN_JAVA_ATTR_TYPE_SYNTHETIC_ATTR; @@ -3070,9 +3107,9 @@ R_API RBinJavaAttrInfo* r_bin_java_synthetic_attr_new(ut8 *buffer, ut64 sz, ut64 return attr; } -R_API ut64 r_bin_java_synthetic_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_synthetic_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf allocation fail return size; } @@ -3081,51 +3118,51 @@ R_API ut64 r_bin_java_synthetic_attr_calc_size(RBinJavaAttrInfo* attr){ } -R_API RBinJavaInterfaceInfo* r_bin_java_interface_new(RBinJavaObj *bin, ut8 *buffer, ut64 sz){ +R_API RBinJavaInterfaceInfo* r_bin_java_interface_new (RBinJavaObj *bin, ut8 *buffer, ut64 sz) { RBinJavaInterfaceInfo *interface_obj = NULL; - interface_obj = (RBinJavaInterfaceInfo *) malloc(sizeof(RBinJavaInterfaceInfo)); + interface_obj = (RBinJavaInterfaceInfo *) malloc (sizeof (RBinJavaInterfaceInfo)); - if(interface_obj == NULL){ + if(interface_obj == NULL) { eprintf ("Unable to allocate memory for RBinJavaInterfaceInfo.\n"); return interface_obj; } - memset(interface_obj, 0, sizeof(RBinJavaInterfaceInfo)); + memset (interface_obj, 0, sizeof (RBinJavaInterfaceInfo)); - if (buffer){ - interface_obj->class_info_idx = R_BIN_JAVA_USHORT(buffer, 0); + if (buffer) { + interface_obj->class_info_idx = R_BIN_JAVA_USHORT (buffer, 0); - interface_obj->cp_class = r_bin_java_get_item_from_bin_cp_list(bin, interface_obj->class_info_idx); - if (interface_obj->cp_class){ - interface_obj->name = r_bin_java_get_item_name_from_bin_cp_list(bin, interface_obj->cp_class); + interface_obj->cp_class = r_bin_java_get_item_from_bin_cp_list (bin, interface_obj->class_info_idx); + if (interface_obj->cp_class) { + interface_obj->name = r_bin_java_get_item_name_from_bin_cp_list (bin, interface_obj->cp_class); }else{ - interface_obj->name = r_str_dup(NULL, "NULL"); + interface_obj->name = r_str_dup (NULL, "NULL"); } }else{ interface_obj->class_info_idx = 0xffff; - interface_obj->name = r_str_dup(NULL, "NULL"); + interface_obj->name = r_str_dup (NULL, "NULL"); } return interface_obj; } -R_API RBinJavaVerificationObj* r_bin_java_verification_info_from_type(RBinJavaObj *bin, R_BIN_JAVA_STACKMAP_TYPE type, ut32 value){ - RBinJavaVerificationObj *stack_element = (RBinJavaVerificationObj *) malloc(sizeof(RBinJavaVerificationObj)); +R_API RBinJavaVerificationObj* r_bin_java_verification_info_from_type(RBinJavaObj *bin, R_BIN_JAVA_STACKMAP_TYPE type, ut32 value) { + RBinJavaVerificationObj *stack_element = (RBinJavaVerificationObj *) malloc (sizeof (RBinJavaVerificationObj)); if (stack_element == NULL) return NULL; - memset(stack_element, 0, sizeof(RBinJavaVerificationObj)); + memset (stack_element, 0, sizeof (RBinJavaVerificationObj)); stack_element->tag = type; - if (stack_element->tag == R_BIN_JAVA_STACKMAP_OBJECT){ + if (stack_element->tag == R_BIN_JAVA_STACKMAP_OBJECT) { stack_element->info.obj_val_cp_idx = (ut16) value; } - else if (stack_element->tag == R_BIN_JAVA_STACKMAP_UNINIT){ - /*if (bin->offset_sz == 4){ + else if (stack_element->tag == R_BIN_JAVA_STACKMAP_UNINIT) { + /*if (bin->offset_sz == 4) { stack_element->info.uninit_offset = value; }else{ stack_element->info.uninit_offset = (ut16) value; @@ -3136,60 +3173,60 @@ R_API RBinJavaVerificationObj* r_bin_java_verification_info_from_type(RBinJavaOb } -R_API RBinJavaVerificationObj* r_bin_java_read_from_buffer_verification_info_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaVerificationObj* r_bin_java_read_from_buffer_verification_info_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut64 offset = 0; - RBinJavaVerificationObj *stack_element = (RBinJavaVerificationObj *) malloc(sizeof(RBinJavaVerificationObj)); + RBinJavaVerificationObj *stack_element = (RBinJavaVerificationObj *) malloc (sizeof (RBinJavaVerificationObj)); - if (stack_element == NULL){ + if (stack_element == NULL) { // eprintf error here return stack_element; } - memset(stack_element, 0, sizeof(RBinJavaVerificationObj)); + memset (stack_element, 0, sizeof (RBinJavaVerificationObj)); stack_element->file_offset = buf_offset; - /*if (sz == 0){ - eprintf("rbin_java_read_next_verification_info: Failed to read bytes for tag.\n"); - //r_bin_java_verification_info_free(stack_element); + /*if (sz == 0) { + eprintf ("rbin_java_read_next_verification_info: Failed to read bytes for tag.\n"); + //r_bin_java_verification_info_free (stack_element); //return NULL; }*/ stack_element->tag = buffer[offset]; offset += 1; - if (stack_element->tag == R_BIN_JAVA_STACKMAP_OBJECT){ + if (stack_element->tag == R_BIN_JAVA_STACKMAP_OBJECT) { - /*if( (offset + 2) <= sz){ - stack_element->info.obj_val_cp_idx = R_BIN_JAVA_USHORT(buffer, offset); + /*if( (offset + 2) <= sz) { + stack_element->info.obj_val_cp_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; }else{ - eprintf("rbin_java_read_next_verification_info: Failed to read bytes for StackMapTable R_BIN_JAVA_STACKMAP_OBJECT Object.\n"); - //r_bin_java_verification_info_free(stack_element); + eprintf ("rbin_java_read_next_verification_info: Failed to read bytes for StackMapTable R_BIN_JAVA_STACKMAP_OBJECT Object.\n"); + //r_bin_java_verification_info_free (stack_element); //return stack_element; }*/ - stack_element->info.obj_val_cp_idx = R_BIN_JAVA_USHORT(buffer, offset); + stack_element->info.obj_val_cp_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; } - else if (stack_element->tag == R_BIN_JAVA_STACKMAP_UNINIT){ - /*if( (offset + 2) <= sz){ - stack_element->info.uninit_offset = R_BIN_JAVA_USHORT(buffer, offset); + else if (stack_element->tag == R_BIN_JAVA_STACKMAP_UNINIT) { + /*if( (offset + 2) <= sz) { + stack_element->info.uninit_offset = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; }else{ - eprintf("rbin_java_read_next_verification_info: Failed to read bytes for StackMapTable R_BIN_JAVA_STACKMAP_UNINIT Object.\n"); - //r_bin_java_verification_info_free(stack_element); + eprintf ("rbin_java_read_next_verification_info: Failed to read bytes for StackMapTable R_BIN_JAVA_STACKMAP_UNINIT Object.\n"); + //r_bin_java_verification_info_free (stack_element); //return stack_element; }*/ - stack_element->info.uninit_offset = R_BIN_JAVA_USHORT(buffer, offset); + stack_element->info.uninit_offset = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; } - if (R_BIN_JAVA_STACKMAP_UNINIT < stack_element->tag){ - eprintf("rbin_java_read_next_verification_info: Unknown Tag: 0x%02x\n", stack_element->tag); + if (R_BIN_JAVA_STACKMAP_UNINIT < stack_element->tag) { + eprintf ("rbin_java_read_next_verification_info: Unknown Tag: 0x%02x\n", stack_element->tag); } stack_element->size = offset; @@ -3197,20 +3234,20 @@ R_API RBinJavaVerificationObj* r_bin_java_read_from_buffer_verification_info_new return stack_element; } -R_API ut64 rbin_java_verification_info_calc_size(RBinJavaVerificationObj* stack_element){ +R_API ut64 rbin_java_verification_info_calc_size(RBinJavaVerificationObj* stack_element) { ut64 sz = 0; - if (stack_element == NULL){ + if (stack_element == NULL) { // eprintf error here return sz; } // r_buf_read_at (bin->b, offset, (ut8*)(&stack_element->tag), 1) sz += 1; - if (stack_element->tag == R_BIN_JAVA_STACKMAP_OBJECT){ + if (stack_element->tag == R_BIN_JAVA_STACKMAP_OBJECT) { //r_buf_read_at (bin->b, offset+1, (ut8*)buf, 2) sz += 2; } - else if (stack_element->tag == R_BIN_JAVA_STACKMAP_UNINIT){ + else if (stack_element->tag == R_BIN_JAVA_STACKMAP_UNINIT) { //r_buf_read_at (bin->b, offset+1, (ut8*)buf, 2) sz += 2; } @@ -3222,7 +3259,7 @@ R_API ut64 rbin_java_verification_info_calc_size(RBinJavaVerificationObj* stack_ -R_API RBinJavaStackMapFrameMetas* r_bin_java_determine_stack_frame_type(ut8 tag){ +R_API RBinJavaStackMapFrameMetas* r_bin_java_determine_stack_frame_type(ut8 tag) { ut8 type_value = 0; if (tag < 64) @@ -3245,7 +3282,7 @@ R_API RBinJavaStackMapFrameMetas* r_bin_java_determine_stack_frame_type(ut8 tag) } -void copy_type_info_to_stack_frame_list(RList *type_list, RList *sf_list){ +void copy_type_info_to_stack_frame_list (RList *type_list, RList *sf_list) { RListIter *iter, *iter_tmp; RBinJavaVerificationObj *ver_obj, *new_ver_obj; if (type_list == NULL) @@ -3253,17 +3290,17 @@ void copy_type_info_to_stack_frame_list(RList *type_list, RList *sf_list){ if (sf_list == NULL) return; - r_list_foreach_safe(type_list, iter, iter_tmp, ver_obj){ - new_ver_obj = (RBinJavaVerificationObj *) malloc(sizeof(RBinJavaVerificationObj)); + r_list_foreach_safe (type_list, iter, iter_tmp, ver_obj) { + new_ver_obj = (RBinJavaVerificationObj *) malloc (sizeof (RBinJavaVerificationObj)); // FIXME: how to handle failed memory allocation? - if(ver_obj){ - memcpy(new_ver_obj, ver_obj, sizeof(RBinJavaVerificationObj)); - r_list_append(sf_list, (void *) new_ver_obj); + if(ver_obj) { + memcpy (new_ver_obj, ver_obj, sizeof (RBinJavaVerificationObj)); + r_list_append (sf_list, (void *) new_ver_obj); } } } -void copy_type_info_to_stack_frame_list_up_to_idx(RList *type_list, RList *sf_list, ut64 idx){ +void copy_type_info_to_stack_frame_list_up_to_idx (RList *type_list, RList *sf_list, ut64 idx) { RListIter *iter, *iter_tmp; RBinJavaVerificationObj *ver_obj, *new_ver_obj; ut32 pos = 0; @@ -3272,15 +3309,15 @@ void copy_type_info_to_stack_frame_list_up_to_idx(RList *type_list, RList *sf_li if (sf_list == NULL) return; - r_list_foreach_safe(type_list, iter, iter_tmp, ver_obj){ - new_ver_obj = (RBinJavaVerificationObj *) malloc(sizeof(RBinJavaVerificationObj)); + r_list_foreach_safe (type_list, iter, iter_tmp, ver_obj) { + new_ver_obj = (RBinJavaVerificationObj *) malloc (sizeof (RBinJavaVerificationObj)); // FIXME: how to handle failed memory allocation? - if(ver_obj){ - memcpy(new_ver_obj, ver_obj, sizeof(RBinJavaVerificationObj)); - r_list_append(sf_list, (void *) new_ver_obj); + if(ver_obj) { + memcpy (new_ver_obj, ver_obj, sizeof (RBinJavaVerificationObj)); + r_list_append (sf_list, (void *) new_ver_obj); } pos++; - if (pos == idx){ + if (pos == idx) { break; } @@ -3288,61 +3325,61 @@ void copy_type_info_to_stack_frame_list_up_to_idx(RList *type_list, RList *sf_li } } -R_API ut64 r_bin_java_stack_map_frame_calc_size(RBinJavaStackMapFrame *stack_frame){ +R_API ut64 r_bin_java_stack_map_frame_calc_size(RBinJavaStackMapFrame *stack_frame) { ut64 size = 0; RListIter *iter, *iter_tmp; RBinJavaVerificationObj *stack_element; - if (stack_frame){ + if (stack_frame) { //stack_frame->tag = buffer[offset]; size += 1; - if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME){ + if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME) { // Nothing to read - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME_LOCALS_1){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME_LOCALS_1) { - r_list_foreach_safe(stack_frame->stack_items, iter, iter_tmp, stack_element){ - size += rbin_java_verification_info_calc_size(stack_element); + r_list_foreach_safe (stack_frame->stack_items, iter, iter_tmp, stack_element) { + size += rbin_java_verification_info_calc_size (stack_element); } - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_CHOP){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_CHOP) { - //stack_frame->offset_delta = R_BIN_JAVA_USHORT(buffer, offset); + //stack_frame->offset_delta = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME_FRAME_EXTENDED){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME_FRAME_EXTENDED) { - //stack_frame->offset_delta = R_BIN_JAVA_USHORT(buffer, offset); + //stack_frame->offset_delta = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(stack_frame->stack_items, iter, iter_tmp, stack_element){ - size += rbin_java_verification_info_calc_size(stack_element); + r_list_foreach_safe (stack_frame->stack_items, iter, iter_tmp, stack_element) { + size += rbin_java_verification_info_calc_size (stack_element); } - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_APPEND){ - //stack_frame->offset_delta = R_BIN_JAVA_USHORT(buffer, offset); + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_APPEND) { + //stack_frame->offset_delta = R_BIN_JAVA_USHORT (buffer, offset); size += 2 ; - r_list_foreach_safe(stack_frame->stack_items, iter, iter_tmp, stack_element){ - size += rbin_java_verification_info_calc_size(stack_element); + r_list_foreach_safe (stack_frame->stack_items, iter, iter_tmp, stack_element) { + size += rbin_java_verification_info_calc_size (stack_element); } - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_FULL_FRAME){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_FULL_FRAME) { - //stack_frame->offset_delta = R_BIN_JAVA_USHORT(buffer, offset); + //stack_frame->offset_delta = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //stack_frame->number_of_locals = R_BIN_JAVA_USHORT(buffer, offset); + //stack_frame->number_of_locals = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(stack_frame->local_items, iter, iter_tmp, stack_element){ - size += rbin_java_verification_info_calc_size(stack_element); + r_list_foreach_safe (stack_frame->local_items, iter, iter_tmp, stack_element) { + size += rbin_java_verification_info_calc_size (stack_element); } - //stack_frame->number_of_stack_items = R_BIN_JAVA_USHORT(buffer, offset); + //stack_frame->number_of_stack_items = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(stack_frame->stack_items, iter, iter_tmp, stack_element){ - size += rbin_java_verification_info_calc_size(stack_element); + r_list_foreach_safe (stack_frame->stack_items, iter, iter_tmp, stack_element) { + size += rbin_java_verification_info_calc_size (stack_element); } } } @@ -3350,14 +3387,14 @@ R_API ut64 r_bin_java_stack_map_frame_calc_size(RBinJavaStackMapFrame *stack_fra } -R_API RBinJavaStackMapFrame* r_bin_java_stack_map_frame_new (ut8* buffer, ut64 sz, RBinJavaStackMapFrame *p_frame, ut64 buf_offset){ - RBinJavaStackMapFrame *stack_frame = r_bin_java_default_stack_frame(); +R_API RBinJavaStackMapFrame* r_bin_java_stack_map_frame_new (ut8* buffer, ut64 sz, RBinJavaStackMapFrame *p_frame, ut64 buf_offset) { + RBinJavaStackMapFrame *stack_frame = r_bin_java_default_stack_frame (); RBinJavaVerificationObj *stack_element; ut64 offset = 0; int i = 0; - if(stack_frame == NULL){ + if(stack_frame == NULL) { // TODO eprintf return stack_frame; } @@ -3366,175 +3403,175 @@ R_API RBinJavaStackMapFrame* r_bin_java_stack_map_frame_new (ut8* buffer, ut64 s stack_frame->tag = buffer[offset]; offset += 1; - stack_frame->metas->type_info = (void *) r_bin_java_determine_stack_frame_type(stack_frame->tag); + stack_frame->metas->type_info = (void *) r_bin_java_determine_stack_frame_type (stack_frame->tag); stack_frame->type = ((RBinJavaStackMapFrameMetas *) stack_frame->metas->type_info)->type; - stack_frame->local_items = r_list_new(); - stack_frame->stack_items = r_list_new(); + stack_frame->local_items = r_list_new (); + stack_frame->stack_items = r_list_new (); stack_frame->file_offset = buf_offset; stack_frame->p_stack_frame = p_frame; - if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME){ + if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME) { // Maybe? 1. Copy the previous frames locals and set the locals count. - //copy_type_info_to_stack_frame_list_up_to_idx(p_frame->local_items, stack_frame->local_items, idx); + //copy_type_info_to_stack_frame_list_up_to_idx (p_frame->local_items, stack_frame->local_items, idx); stack_frame->number_of_locals = p_frame->number_of_locals; - eprintf("r_bin_java_stack_map_frame_new: TODO Stack Frame Same Locals Condition is untested, so there may be issues.\n"); + eprintf ("r_bin_java_stack_map_frame_new: TODO Stack Frame Same Locals Condition is untested, so there may be issues.\n"); - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME_LOCALS_1){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME_LOCALS_1) { // 1. Read the stack type stack_frame->number_of_stack_items = 1; - stack_element = r_bin_java_read_from_buffer_verification_info_new(buffer+offset, sz-offset, buf_offset+offset); + stack_element = r_bin_java_read_from_buffer_verification_info_new (buffer+offset, sz-offset, buf_offset+offset); - if (stack_element){ + if (stack_element) { offset += stack_element->size; }else{ - eprintf("r_bin_java_stack_map_frame_new: Unable to parse the Stack Items for the stack frame.\n"); - r_bin_java_stack_frame_free(stack_frame); + eprintf ("r_bin_java_stack_map_frame_new: Unable to parse the Stack Items for the stack frame.\n"); + r_bin_java_stack_frame_free (stack_frame); return NULL; } - r_list_append(stack_frame->stack_items, (void *) stack_element); + r_list_append (stack_frame->stack_items, (void *) stack_element); // Maybe? 3. Copy the previous frames locals and set the locals count. - //copy_type_info_to_stack_frame_list_up_to_idx(p_frame->local_items, stack_frame->local_items, idx); + //copy_type_info_to_stack_frame_list_up_to_idx (p_frame->local_items, stack_frame->local_items, idx); stack_frame->number_of_locals = p_frame->number_of_locals; - eprintf("r_bin_java_stack_map_frame_new: TODO Stack Frame Same Locals 1 Stack Element Condition is untested, so there may be issues.\n"); + eprintf ("r_bin_java_stack_map_frame_new: TODO Stack Frame Same Locals 1 Stack Element Condition is untested, so there may be issues.\n"); - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_CHOP){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_CHOP) { // 1. Calculate the max index we want to copy from the list of the - // previous frames locals + // previous frames locals ut16 k = 251 - stack_frame->tag;/*, - idx = p_frame->number_of_locals - k; + idx = p_frame->number_of_locals - k; */ // 2. read the uoffset value - stack_frame->offset_delta = R_BIN_JAVA_USHORT(buffer, offset); + stack_frame->offset_delta = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; // Maybe? 3. Copy the previous frames locals and set the locals count. - //copy_type_info_to_stack_frame_list_up_to_idx(p_frame->local_items, stack_frame->local_items, idx); + //copy_type_info_to_stack_frame_list_up_to_idx (p_frame->local_items, stack_frame->local_items, idx); stack_frame->number_of_locals = p_frame->number_of_locals; - eprintf("r_bin_java_stack_map_frame_new: TODO Stack Frame Chop Condition is untested, so there may be issues.\n"); + eprintf ("r_bin_java_stack_map_frame_new: TODO Stack Frame Chop Condition is untested, so there may be issues.\n"); - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME_FRAME_EXTENDED){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_SAME_FRAME_EXTENDED) { // 1. Read the uoffset - stack_frame->offset_delta = R_BIN_JAVA_USHORT(buffer, offset); + stack_frame->offset_delta = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; // 2. Read the stack element type stack_frame->number_of_stack_items = 1; - stack_element = r_bin_java_read_from_buffer_verification_info_new(buffer+offset, sz-offset, buf_offset+offset); + stack_element = r_bin_java_read_from_buffer_verification_info_new (buffer+offset, sz-offset, buf_offset+offset); - if(stack_element){ + if(stack_element) { offset += stack_element->size; }else{ - eprintf("r_bin_java_stack_map_frame_new: Unable to parse the Stack Items for the stack frame.\n"); - r_bin_java_stack_frame_free(stack_frame); + eprintf ("r_bin_java_stack_map_frame_new: Unable to parse the Stack Items for the stack frame.\n"); + r_bin_java_stack_frame_free (stack_frame); return NULL; } - r_list_append(stack_frame->stack_items, (void *) stack_element); + r_list_append (stack_frame->stack_items, (void *) stack_element); // Maybe? 3. Copy the previous frames locals to the current locals - //copy_type_info_to_stack_frame_list_up_to_idx(p_frame->local_items, stack_frame->local_items, idx); + //copy_type_info_to_stack_frame_list_up_to_idx (p_frame->local_items, stack_frame->local_items, idx); stack_frame->number_of_locals = p_frame->number_of_locals; - eprintf("r_bin_java_stack_map_frame_new: TODO Stack Frame Same Locals Frame Stack 1 Extended Condition is untested, so there may be issues.\n"); + eprintf ("r_bin_java_stack_map_frame_new: TODO Stack Frame Same Locals Frame Stack 1 Extended Condition is untested, so there may be issues.\n"); - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_APPEND){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_APPEND) { // 1. Calculate the max index we want to copy from the list of the - // previous frames locals + // previous frames locals ut16 k = stack_frame->tag - 251, - i = 0; + i = 0; // 2. Read the uoffset - stack_frame->offset_delta = R_BIN_JAVA_USHORT(buffer, offset); + stack_frame->offset_delta = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; // Maybe? 3. Copy the previous frames locals to the current locals - //copy_type_info_to_stack_frame_list_up_to_idx(p_frame->local_items, stack_frame->local_items, idx); + //copy_type_info_to_stack_frame_list_up_to_idx (p_frame->local_items, stack_frame->local_items, idx); // 4. Read off the rest of the appended locals types - for (i=0; i < k; i++){ - stack_element = r_bin_java_read_from_buffer_verification_info_new(buffer+offset, sz-offset, buf_offset+offset); + for (i=0; i < k; i++) { + stack_element = r_bin_java_read_from_buffer_verification_info_new (buffer+offset, sz-offset, buf_offset+offset); - if (stack_element){ + if (stack_element) { offset += stack_element->size; }else{ - eprintf("r_bin_java_stack_map_frame_new: Unable to parse the locals for the stack frame.\n"); - r_bin_java_stack_frame_free(stack_frame); + eprintf ("r_bin_java_stack_map_frame_new: Unable to parse the locals for the stack frame.\n"); + r_bin_java_stack_frame_free (stack_frame); return NULL; } - r_list_append(stack_frame->local_items, (void *) stack_element); + r_list_append (stack_frame->local_items, (void *) stack_element); } stack_frame->number_of_locals = p_frame->number_of_locals + k; - eprintf("r_bin_java_stack_map_frame_new: TODO Stack Frame Same Locals Frame Stack 1 Extended Condition is untested, so there may be issues.\n"); + eprintf ("r_bin_java_stack_map_frame_new: TODO Stack Frame Same Locals Frame Stack 1 Extended Condition is untested, so there may be issues.\n"); - }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_FULL_FRAME){ + }else if(stack_frame->type == R_BIN_JAVA_STACK_FRAME_FULL_FRAME) { - stack_frame->offset_delta = R_BIN_JAVA_USHORT(buffer, offset); + stack_frame->offset_delta = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - //IFDBG printf("r_bin_java_stack_map_frame_new: Code Size > 65535, read( %d bytes), offset = 0x%08x.\n", var_sz, stack_frame->offset_delta); + //IFDBG printf ("r_bin_java_stack_map_frame_new: Code Size > 65535, read( %d bytes), offset = 0x%08x.\n", var_sz, stack_frame->offset_delta); // Read the number of variables based on the max # local variable - stack_frame->number_of_locals = R_BIN_JAVA_USHORT(buffer, offset); + stack_frame->number_of_locals = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - //IFDBG printf("r_bin_java_stack_map_frame_new: Max ulocalvar > 65535, read( %d bytes), number_of_locals = 0x%08x.\n", var_sz, stack_frame->number_of_locals); + //IFDBG printf ("r_bin_java_stack_map_frame_new: Max ulocalvar > 65535, read( %d bytes), number_of_locals = 0x%08x.\n", var_sz, stack_frame->number_of_locals); IFDBG r_bin_java_print_stack_map_frame_summary(stack_frame); // read the number of locals off the stack - for (i = 0; i < stack_frame->number_of_locals; i++){ - stack_element = r_bin_java_read_from_buffer_verification_info_new(buffer+offset, sz-offset, buf_offset+offset); + for (i = 0; i < stack_frame->number_of_locals; i++) { + stack_element = r_bin_java_read_from_buffer_verification_info_new (buffer+offset, sz-offset, buf_offset+offset); - if (stack_element){ + if (stack_element) { offset += stack_element->size; - //r_list_append(stack_frame->local_items, (void *) stack_element); + //r_list_append (stack_frame->local_items, (void *) stack_element); }else{ - eprintf("r_bin_java_stack_map_frame_new: Unable to parse the locals for the stack frame.\n"); - r_bin_java_stack_frame_free(stack_frame); + eprintf ("r_bin_java_stack_map_frame_new: Unable to parse the locals for the stack frame.\n"); + r_bin_java_stack_frame_free (stack_frame); return NULL; } - r_list_append(stack_frame->local_items, (void *) stack_element); + r_list_append (stack_frame->local_items, (void *) stack_element); } // Read the number of stack items based on the max size of stack - stack_frame->number_of_stack_items = R_BIN_JAVA_USHORT(buffer, offset); + stack_frame->number_of_stack_items = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - //IFDBG printf("r_bin_java_stack_map_frame_new: Max ustack items > 65535, read( %d bytes), number_of_locals = 0x%08x.\n", var_sz, stack_frame->number_of_stack_items); + //IFDBG printf ("r_bin_java_stack_map_frame_new: Max ustack items > 65535, read( %d bytes), number_of_locals = 0x%08x.\n", var_sz, stack_frame->number_of_stack_items); // read the stack items - for (i = 0; i < stack_frame->number_of_stack_items; i++){ - stack_element = r_bin_java_read_from_buffer_verification_info_new(buffer+offset, sz-offset, buf_offset+offset); - if(stack_element){ + for (i = 0; i < stack_frame->number_of_stack_items; i++) { + stack_element = r_bin_java_read_from_buffer_verification_info_new (buffer+offset, sz-offset, buf_offset+offset); + if(stack_element) { offset += stack_element->size; - // r_list_append(stack_frame->stack_items, (void *) stack_element); + // r_list_append (stack_frame->stack_items, (void *) stack_element); }else{ - eprintf("r_bin_java_stack_map_frame_new: Unable to parse the the stack items for the stack frame.\n"); - r_bin_java_stack_frame_free(stack_frame); + eprintf ("r_bin_java_stack_map_frame_new: Unable to parse the the stack items for the stack frame.\n"); + r_bin_java_stack_frame_free (stack_frame); return NULL; } - r_list_append(stack_frame->local_items, (void *) stack_element); + r_list_append (stack_frame->local_items, (void *) stack_element); } } - //IFDBG printf("Created a stack frame at offset(0x%llx) of size: %d\n", buf_offset, stack_frame->size);//r_bin_java_print_stack_map_frame_summary(stack_frame); + //IFDBG printf ("Created a stack frame at offset(0x%llx) of size: %d\n", buf_offset, stack_frame->size);//r_bin_java_print_stack_map_frame_summary(stack_frame); stack_frame->size = offset; //IFDBG r_bin_java_print_stack_map_frame_summary(stack_frame); return stack_frame; } -ut16 r_bin_java_find_cp_class_ref_from_name_idx(RBinJavaObj *bin, ut16 name_idx){ - ut16 pos, len = (ut16) r_list_length(bin->cp_list); +ut16 r_bin_java_find_cp_class_ref_from_name_idx (RBinJavaObj *bin, ut16 name_idx) { + ut16 pos, len = (ut16) r_list_length (bin->cp_list); RBinJavaCPTypeObj *item; - for (pos = 0; pos < len; pos++){ - item = (RBinJavaCPTypeObj *) r_list_get_n(bin->cp_list, pos); + for (pos = 0; pos < len; pos++) { + item = (RBinJavaCPTypeObj *) r_list_get_n (bin->cp_list, pos); if (item && item->tag == R_BIN_JAVA_CP_CLASS && item->info.cp_class.name_idx == name_idx) break; } @@ -3543,26 +3580,26 @@ ut16 r_bin_java_find_cp_class_ref_from_name_idx(RBinJavaObj *bin, ut16 name_idx) } -R_API RBinJavaStackMapFrame* r_bin_java_default_stack_frame(){ +R_API RBinJavaStackMapFrame* r_bin_java_default_stack_frame() { - RBinJavaStackMapFrame* stack_frame = (RBinJavaStackMapFrame *) malloc(sizeof(RBinJavaStackMapFrame)); + RBinJavaStackMapFrame* stack_frame = (RBinJavaStackMapFrame *) malloc (sizeof (RBinJavaStackMapFrame)); if(stack_frame == NULL) return stack_frame; - memset(stack_frame, 0, sizeof(RBinJavaStackMapFrame)); - stack_frame->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + memset (stack_frame, 0, sizeof (RBinJavaStackMapFrame)); + stack_frame->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); - if(stack_frame->metas == NULL){ - free(stack_frame); + if(stack_frame->metas == NULL) { + free (stack_frame); return NULL; } - memset(stack_frame->metas, 0, sizeof(RBinJavaMetaInfo)); + memset (stack_frame->metas, 0, sizeof (RBinJavaMetaInfo)); stack_frame->metas->type_info = (void *) &R_BIN_JAVA_STACK_MAP_FRAME_METAS[R_BIN_JAVA_STACK_FRAME_IMPLICIT]; stack_frame->type = ((RBinJavaStackMapFrameMetas *) stack_frame->metas->type_info)->type; - stack_frame->local_items = r_list_new(); - stack_frame->stack_items = r_list_new(); + stack_frame->local_items = r_list_new (); + stack_frame->stack_items = r_list_new (); stack_frame->number_of_stack_items = 0; stack_frame->number_of_locals = 0; @@ -3570,15 +3607,15 @@ R_API RBinJavaStackMapFrame* r_bin_java_default_stack_frame(){ return stack_frame; } -R_API RBinJavaStackMapFrame* r_bin_java_build_stack_frame_from_local_variable_table(RBinJavaObj *bin, RBinJavaAttrInfo *attr){ - RBinJavaStackMapFrame *stack_frame = r_bin_java_default_stack_frame(); +R_API RBinJavaStackMapFrame* r_bin_java_build_stack_frame_from_local_variable_table(RBinJavaObj *bin, RBinJavaAttrInfo *attr) { + RBinJavaStackMapFrame *stack_frame = r_bin_java_default_stack_frame (); RBinJavaLocalVariableAttribute *lvattr = NULL; RBinJavaVerificationObj *type_item; RListIter *iter = NULL, *iter_tmp = NULL; ut32 value_cnt = 0; - if (bin == NULL || attr == NULL || attr->type != R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TABLE_ATTR){ - eprintf("Attempting to create a stack_map frame from a bad attribute.\n"); + if (bin == NULL || attr == NULL || attr->type != R_BIN_JAVA_ATTR_TYPE_LOCAL_VARIABLE_TABLE_ATTR) { + eprintf ("Attempting to create a stack_map frame from a bad attribute.\n"); return stack_frame; } @@ -3588,7 +3625,7 @@ R_API RBinJavaStackMapFrame* r_bin_java_build_stack_frame_from_local_variable_ta stack_frame->number_of_locals = attr->info.local_variable_table_attr.table_length; - r_list_foreach_safe(attr->info.local_variable_table_attr.local_variable_table, iter, iter_tmp, lvattr){ + r_list_foreach_safe (attr->info.local_variable_table_attr.local_variable_table, iter, iter_tmp, lvattr) { ut32 pos = 0; ut8 value = 'N'; ut8 is_object = 0; @@ -3596,54 +3633,54 @@ R_API RBinJavaStackMapFrame* r_bin_java_build_stack_frame_from_local_variable_ta continue; // knock the array Types - while (lvattr->descriptor[pos] == '['){ + while (lvattr->descriptor[pos] == '[') { is_object = 1; pos ++; } value = lvattr->descriptor[pos]; - //IFDBG printf("Found the following type value: %c at pos %d in %s\n", value, pos, lvattr->descriptor); + //IFDBG printf ("Found the following type value: %c at pos %d in %s\n", value, pos, lvattr->descriptor); - if (value == 'I' || value == 'Z' || value == 'S' || value == 'B' || value == 'C'){ - type_item = r_bin_java_verification_info_from_type(bin, R_BIN_JAVA_STACKMAP_INTEGER, 0); - }else if (value == 'F'){ - type_item = r_bin_java_verification_info_from_type(bin, R_BIN_JAVA_STACKMAP_FLOAT, 0); - }else if (value == 'D'){ - type_item = r_bin_java_verification_info_from_type(bin, R_BIN_JAVA_STACKMAP_DOUBLE, 0); - }else if (value == 'J'){ - type_item = r_bin_java_verification_info_from_type(bin, R_BIN_JAVA_STACKMAP_LONG, 0); - }else if (value == 'L'){ + if (value == 'I' || value == 'Z' || value == 'S' || value == 'B' || value == 'C') { + type_item = r_bin_java_verification_info_from_type (bin, R_BIN_JAVA_STACKMAP_INTEGER, 0); + }else if (value == 'F') { + type_item = r_bin_java_verification_info_from_type (bin, R_BIN_JAVA_STACKMAP_FLOAT, 0); + }else if (value == 'D') { + type_item = r_bin_java_verification_info_from_type (bin, R_BIN_JAVA_STACKMAP_DOUBLE, 0); + }else if (value == 'J') { + type_item = r_bin_java_verification_info_from_type (bin, R_BIN_JAVA_STACKMAP_LONG, 0); + }else if (value == 'L') { // TODO: FIXME write something that will iterate over the CP Pool and find the // CONSTANT_Class_info referencing this - ut16 idx = r_bin_java_find_cp_class_ref_from_name_idx(bin, lvattr->name_idx); - type_item = r_bin_java_verification_info_from_type(bin, R_BIN_JAVA_STACKMAP_OBJECT, idx); + ut16 idx = r_bin_java_find_cp_class_ref_from_name_idx (bin, lvattr->name_idx); + type_item = r_bin_java_verification_info_from_type (bin, R_BIN_JAVA_STACKMAP_OBJECT, idx); }else{ - eprintf("r_bin_java_build_stack_frame_from_local_variable_table: not sure how to handle: name: %s, type: %s\n", lvattr->name, lvattr->descriptor); - type_item = r_bin_java_verification_info_from_type(bin, R_BIN_JAVA_STACKMAP_NULL, 0); + eprintf ("r_bin_java_build_stack_frame_from_local_variable_table: not sure how to handle: name: %s, type: %s\n", lvattr->name, lvattr->descriptor); + type_item = r_bin_java_verification_info_from_type (bin, R_BIN_JAVA_STACKMAP_NULL, 0); } - /*else if (strcmp("", "") == 0){ + /*else if (strcmp("", "") == 0) { type_item = r_bin_java_verification_info_from_type(bin, R_BIN_JAVA_STACKMAP_DOUBLE, 0); }*/ if (type_item) - r_list_append(stack_frame->local_items, (void *)type_item); + r_list_append (stack_frame->local_items, (void *)type_item); value_cnt++; } - if (value_cnt != attr->info.local_variable_table_attr.table_length){ - IFDBG eprintf("r_bin_java_build_stack_frame_from_local_variable_table: Number of locals not accurate. Expected %d but got %d", attr->info.local_variable_table_attr.table_length, value_cnt); + if (value_cnt != attr->info.local_variable_table_attr.table_length) { + IFDBG eprintf ("r_bin_java_build_stack_frame_from_local_variable_table: Number of locals not accurate. Expected %d but got %d", attr->info.local_variable_table_attr.table_length, value_cnt); } return stack_frame; } -R_API ut64 r_bin_java_stack_map_table_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_stack_map_table_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; RListIter *iter, *iter_tmp; RBinJavaStackMapFrame *stack_frame = NULL; - if (attr){ - //attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + if (attr) { + //attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); size += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf return size; } @@ -3651,10 +3688,10 @@ R_API ut64 r_bin_java_stack_map_table_attr_calc_size(RBinJavaAttrInfo* attr){ //IFDBG r_bin_java_print_source_code_file_attr_summary(attr); // Current spec does not call for variable sizes. - //attr->info.stack_map_table_attr.number_of_entries = R_BIN_JAVA_USHORT(buffer, offset); + //attr->info.stack_map_table_attr.number_of_entries = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(attr->info.stack_map_table_attr.stack_map_frame_entries, iter, iter_tmp, stack_frame){ - size += r_bin_java_stack_map_frame_calc_size(stack_frame); + r_list_foreach_safe (attr->info.stack_map_table_attr.stack_map_frame_entries, iter, iter_tmp, stack_frame) { + size += r_bin_java_stack_map_frame_calc_size (stack_frame); } } @@ -3662,46 +3699,46 @@ R_API ut64 r_bin_java_stack_map_table_attr_calc_size(RBinJavaAttrInfo* attr){ } -R_API RBinJavaAttrInfo* r_bin_java_stack_map_table_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_stack_map_table_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0; ut64 offset = 0; RBinJavaStackMapFrame *stack_frame = NULL, *new_stack_frame = NULL; - RBinJavaAttrInfo *attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + RBinJavaAttrInfo *attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf return attr; } - attr->info.stack_map_table_attr.stack_map_frame_entries = r_list_new(); + attr->info.stack_map_table_attr.stack_map_frame_entries = r_list_new (); //IFDBG r_bin_java_print_source_code_file_attr_summary(attr); // Current spec does not call for variable sizes. - attr->info.stack_map_table_attr.number_of_entries = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.stack_map_table_attr.number_of_entries = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; //IFDBG r_bin_java_print_stack_map_table_attr_summary(attr); - for(i=0; i < attr->info.stack_map_table_attr.number_of_entries; i++){ + for(i=0; i < attr->info.stack_map_table_attr.number_of_entries; i++) { // read next stack frame - //IFDBG printf("Reading StackMap Entry #%d @ 0x%llx\n", i, buf_offset+offset); + //IFDBG printf ("Reading StackMap Entry #%d @ 0x%llx\n", i, buf_offset+offset); if (stack_frame == NULL && R_BIN_JAVA_GLOBAL_BIN && R_BIN_JAVA_GLOBAL_BIN->current_code_attr) stack_frame = R_BIN_JAVA_GLOBAL_BIN->current_code_attr->info.code_attr.implicit_frame; - new_stack_frame = r_bin_java_stack_map_frame_new(buffer+offset, sz-offset, stack_frame, buf_offset+offset); + new_stack_frame = r_bin_java_stack_map_frame_new (buffer+offset, sz-offset, stack_frame, buf_offset+offset); - if (new_stack_frame){ + if (new_stack_frame) { offset += new_stack_frame->size; // append stack frame to the list - r_list_append(attr->info.stack_map_table_attr.stack_map_frame_entries, (void *) new_stack_frame); + r_list_append (attr->info.stack_map_table_attr.stack_map_frame_entries, (void *) new_stack_frame); stack_frame = new_stack_frame; }else{ - eprintf("r_bin_java_stack_map_table_attr_new: Unable to parse the the stack the stack frame for the stack map table.\n"); - r_bin_java_stack_map_table_attr_free(attr); + eprintf ("r_bin_java_stack_map_table_attr_new: Unable to parse the the stack the stack frame for the stack map table.\n"); + r_bin_java_stack_map_table_attr_free (attr); attr = NULL; break; } @@ -3720,58 +3757,58 @@ R_API RBinJavaAttrInfo* r_bin_java_stack_map_table_attr_new(ut8* buffer, ut64 sz // Start new Constant Pool Types -R_API RBinJavaCPTypeObj* r_bin_java_do_nothing_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_do_nothing_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { return (RBinJavaCPTypeObj *)NULL; } -R_API ut64 r_bin_java_do_nothing_calc_size(RBinJavaCPTypeObj *obj){ +R_API ut64 r_bin_java_do_nothing_calc_size(RBinJavaCPTypeObj *obj) { return 0; } -R_API void r_bin_java_do_nothing_free(RBinJavaCPTypeObj *obj){ +R_API void r_bin_java_do_nothing_free (RBinJavaCPTypeObj *obj) { return ; } -R_API RBinJavaCPTypeObj* r_bin_java_unknown_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_unknown_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; - obj = (RBinJavaCPTypeObj*) malloc(sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj*) malloc (sizeof (RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[R_BIN_JAVA_CP_UNKNOWN]; } return obj; } -R_API ut64 r_bin_java_unknown_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_unknown_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; size += 1; return size; } -R_API RBinJavaCPTypeObj* r_bin_java_class_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_class_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; - quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_CLASS, tag, sz, "Class" ); - if (quick_check > 0){ + quick_check = r_bin_java_quick_check (R_BIN_JAVA_CP_CLASS, tag, sz, "Class" ); + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj*) malloc(sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj*) malloc (sizeof (RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; obj->info.cp_class.name_idx = R_BIN_JAVA_USHORT (buffer, 1); @@ -3781,7 +3818,7 @@ R_API RBinJavaCPTypeObj* r_bin_java_class_cp_new(RBinJavaObj *bin, ut8* buffer, return obj; } -R_API ut64 r_bin_java_class_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_class_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; //ut8 tag = buffer[0]; size += 1; @@ -3793,22 +3830,22 @@ R_API ut64 r_bin_java_class_cp_calc_size(RBinJavaCPTypeObj* obj){ -R_API RBinJavaCPTypeObj* r_bin_java_fieldref_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_fieldref_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; - quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_FIELDREF, tag, sz, "FieldRef" ); - if (quick_check > 0){ + quick_check = r_bin_java_quick_check (R_BIN_JAVA_CP_FIELDREF, tag, sz, "FieldRef" ); + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj*) malloc(sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj*) malloc (sizeof (RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; obj->info.cp_field.class_idx = R_BIN_JAVA_USHORT (buffer, 1); @@ -3819,7 +3856,7 @@ R_API RBinJavaCPTypeObj* r_bin_java_fieldref_cp_new(RBinJavaObj *bin, ut8* buffe return (RBinJavaCPTypeObj*) obj; } -R_API ut64 r_bin_java_fieldref_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_fieldref_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; // tag size += 1; @@ -3831,21 +3868,21 @@ R_API ut64 r_bin_java_fieldref_cp_calc_size(RBinJavaCPTypeObj* obj){ } -R_API RBinJavaCPTypeObj* r_bin_java_methodref_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_methodref_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_METHODREF, tag, sz, "MethodRef" ); - if (quick_check > 0){ + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; obj->info.cp_method.class_idx = R_BIN_JAVA_USHORT (buffer, 1); @@ -3856,7 +3893,7 @@ R_API RBinJavaCPTypeObj* r_bin_java_methodref_cp_new(RBinJavaObj *bin, ut8* buff return obj; } -R_API ut64 r_bin_java_methodref_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_methodref_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; // tag size += 1; @@ -3868,24 +3905,24 @@ R_API ut64 r_bin_java_methodref_cp_calc_size(RBinJavaCPTypeObj* obj){ } -R_API RBinJavaCPTypeObj* r_bin_java_interfacemethodref_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_interfacemethodref_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_INTERFACEMETHOD_REF, tag, sz, "InterfaceMethodRef" ); - if (quick_check > 0){ + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); obj->info.cp_interface.class_idx = R_BIN_JAVA_USHORT (buffer, 1); @@ -3896,7 +3933,7 @@ R_API RBinJavaCPTypeObj* r_bin_java_interfacemethodref_cp_new(RBinJavaObj *bin, return (RBinJavaCPTypeObj*) obj; } -R_API ut64 r_bin_java_interfacemethodref_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_interfacemethodref_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; // tag size += 1; @@ -3909,23 +3946,23 @@ R_API ut64 r_bin_java_interfacemethodref_cp_calc_size(RBinJavaCPTypeObj* obj){ -R_API RBinJavaCPTypeObj* r_bin_java_string_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_string_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_STRING, tag, sz, "String" ); - if (quick_check > 0){ + if (quick_check > 0) { return (RBinJavaCPTypeObj*) obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); obj->info.cp_string.string_idx = R_BIN_JAVA_USHORT (buffer, 1); @@ -3933,7 +3970,7 @@ R_API RBinJavaCPTypeObj* r_bin_java_string_cp_new(RBinJavaObj *bin, ut8* buffer, return obj; } -R_API ut64 r_bin_java_string_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_string_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; // tag size += 1; @@ -3942,31 +3979,31 @@ R_API ut64 r_bin_java_string_cp_calc_size(RBinJavaCPTypeObj* obj){ return size; } -R_API RBinJavaCPTypeObj* r_bin_java_integer_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_integer_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_INTEGER, tag, sz, "Integer" ); - if (quick_check > 0){ + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); - memset(&obj->info.cp_integer.bytes, 0, sizeof(obj->info.cp_integer.bytes)); - memcpy(&obj->info.cp_integer.bytes.raw, buffer+1, 4); + memset (&obj->info.cp_integer.bytes, 0, sizeof (obj->info.cp_integer.bytes)); + memcpy (&obj->info.cp_integer.bytes.raw, buffer+1, 4); } return obj; } -R_API ut64 r_bin_java_integer_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_integer_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; // tag size += 1; @@ -3975,32 +4012,32 @@ R_API ut64 r_bin_java_integer_cp_calc_size(RBinJavaCPTypeObj* obj){ return size; } -R_API RBinJavaCPTypeObj* r_bin_java_float_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_float_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; - quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_FLOAT, tag, sz, "Float" ); - if (quick_check > 0){ + quick_check = r_bin_java_quick_check (R_BIN_JAVA_CP_FLOAT, tag, sz, "Float" ); + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); - memset(&obj->info.cp_float.bytes, 0, sizeof(obj->info.cp_float.bytes)); - memcpy(&obj->info.cp_float.bytes.raw, buffer, 4); + memset (&obj->info.cp_float.bytes, 0, sizeof (obj->info.cp_float.bytes)); + memcpy (&obj->info.cp_float.bytes.raw, buffer, 4); } return (RBinJavaCPTypeObj*) obj; } -R_API ut64 r_bin_java_float_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_float_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; // tag size += 1; @@ -4009,32 +4046,32 @@ R_API ut64 r_bin_java_float_cp_calc_size(RBinJavaCPTypeObj* obj){ return size; } -R_API RBinJavaCPTypeObj* r_bin_java_long_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_long_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; - quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_LONG, tag, sz, "Long" ); - if (quick_check > 0){ + quick_check = r_bin_java_quick_check (R_BIN_JAVA_CP_LONG, tag, sz, "Long" ); + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); - memset(&obj->info.cp_long.bytes, 0, sizeof(obj->info.cp_long.bytes)); - memcpy(&(obj->info.cp_long.bytes), buffer+1, 8); + memset (&obj->info.cp_long.bytes, 0, sizeof (obj->info.cp_long.bytes)); + memcpy (&(obj->info.cp_long.bytes), buffer+1, 8); } return obj; } -R_API ut64 r_bin_java_long_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_long_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; // tag size += 1; @@ -4043,25 +4080,25 @@ R_API ut64 r_bin_java_long_cp_calc_size(RBinJavaCPTypeObj* obj){ return size; } -R_API RBinJavaCPTypeObj* r_bin_java_double_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_double_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_DOUBLE, tag, sz, "Double" ); - if (quick_check > 0){ + if (quick_check > 0) { return (RBinJavaCPTypeObj*) obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); - memset(&obj->info.cp_double.bytes, 0, sizeof(obj->info.cp_double.bytes)); - memcpy(&obj->info.cp_double.bytes, buffer+1, 8); + memset (&obj->info.cp_double.bytes, 0, sizeof (obj->info.cp_double.bytes)); + memcpy (&obj->info.cp_double.bytes, buffer+1, 8); @@ -4070,7 +4107,7 @@ R_API RBinJavaCPTypeObj* r_bin_java_double_cp_new(RBinJavaObj *bin, ut8* buffer, return obj; } -R_API ut64 r_bin_java_double_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_double_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; // tag size += 1; @@ -4080,39 +4117,39 @@ R_API ut64 r_bin_java_double_cp_calc_size(RBinJavaCPTypeObj* obj){ } -R_API RBinJavaCPTypeObj* r_bin_java_utf8_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_utf8_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; - quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_UTF8, tag, sz, "Utf8" ); - if (quick_check > 0){ + quick_check = r_bin_java_quick_check (R_BIN_JAVA_CP_UTF8, tag, sz, "Utf8" ); + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); obj->tag = tag; - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name); obj->info.cp_utf8.length = R_BIN_JAVA_USHORT (buffer, 1); - obj->info.cp_utf8.bytes = (ut8 *) malloc(obj->info.cp_utf8.length+1); - if (obj->info.cp_utf8.bytes){ - memset(obj->info.cp_utf8.bytes, 0, obj->info.cp_utf8.length+1); - if (obj->info.cp_utf8.length < (sz - 3)){ - memcpy(obj->info.cp_utf8.bytes, buffer+3, (sz - 3)); + obj->info.cp_utf8.bytes = (ut8 *) malloc (obj->info.cp_utf8.length+1); + if (obj->info.cp_utf8.bytes) { + memset (obj->info.cp_utf8.bytes, 0, obj->info.cp_utf8.length+1); + if (obj->info.cp_utf8.length < (sz - 3)) { + memcpy (obj->info.cp_utf8.bytes, buffer+3, (sz - 3)); obj->info.cp_utf8.length = sz - 3; }else{ - memcpy(obj->info.cp_utf8.bytes, buffer+3, obj->info.cp_utf8.length); + memcpy (obj->info.cp_utf8.bytes, buffer+3, obj->info.cp_utf8.length); } obj->value = obj->info.cp_utf8.bytes; } else{ - r_bin_java_obj_free(obj); + r_bin_java_obj_free (obj); obj = NULL; } @@ -4121,32 +4158,32 @@ R_API RBinJavaCPTypeObj* r_bin_java_utf8_cp_new(RBinJavaObj *bin, ut8* buffer, u } -R_API ut64 r_bin_java_utf8_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_utf8_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; size += 1; - if (obj && R_BIN_JAVA_CP_UTF8 == obj->tag){ - // memcpy(obj->info.cp_utf8.bytes, buffer+3, obj->info.cp_utf8.length); + if (obj && R_BIN_JAVA_CP_UTF8 == obj->tag) { + // memcpy (obj->info.cp_utf8.bytes, buffer+3, obj->info.cp_utf8.length); size += obj->info.cp_utf8.length; } return size; } -R_API RBinJavaCPTypeObj* r_bin_java_name_and_type_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_name_and_type_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_NAMEANDTYPE, tag, sz, "RBinJavaCPTypeNameAndType" ); - if (quick_check > 0){ + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name);; + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name);; obj->tag = tag; obj->info.cp_name_and_type.name_idx = R_BIN_JAVA_USHORT (buffer, 1); @@ -4157,10 +4194,10 @@ R_API RBinJavaCPTypeObj* r_bin_java_name_and_type_cp_new(RBinJavaObj *bin, ut8* } -R_API ut64 r_bin_java_name_and_type_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_name_and_type_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; - if (obj){ + if (obj) { size += 1; //obj->info.cp_name_and_type.name_idx = R_BIN_JAVA_USHORT (buffer, 1); size += 2; @@ -4170,22 +4207,22 @@ R_API ut64 r_bin_java_name_and_type_cp_calc_size(RBinJavaCPTypeObj* obj){ return size; } -R_API RBinJavaCPTypeObj* r_bin_java_methodtype_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_methodtype_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; - quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_METHODTYPE, tag, sz, "RBinJavaCPTypeMethodType" ); - if (quick_check > 0){ + quick_check = r_bin_java_quick_check (R_BIN_JAVA_CP_METHODTYPE, tag, sz, "RBinJavaCPTypeMethodType" ); + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name);; + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name);; obj->tag = tag; obj->info.cp_method_type.descriptor_index = R_BIN_JAVA_USHORT (buffer, 1); @@ -4195,7 +4232,7 @@ R_API RBinJavaCPTypeObj* r_bin_java_methodtype_cp_new(RBinJavaObj *bin, ut8* buf } -R_API ut64 r_bin_java_methodtype_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_methodtype_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; size += 1; // obj->info.cp_method_type.descriptor_index = R_BIN_JAVA_USHORT (buffer, 1); @@ -4204,68 +4241,68 @@ R_API ut64 r_bin_java_methodtype_cp_calc_size(RBinJavaCPTypeObj* obj){ } -R_API RBinJavaCPTypeObj* r_bin_java_methodhandle_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_methodhandle_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_METHODHANDLE, tag, sz, "RBinJavaCPTypeMethodHandle" ); - if (quick_check > 0){ + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name);; + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name);; obj->tag = tag; obj->info.cp_method_handle.reference_kind = buffer[1]; - obj->info.cp_method_handle.reference_index = R_BIN_JAVA_USHORT(buffer, 2); + obj->info.cp_method_handle.reference_index = R_BIN_JAVA_USHORT (buffer, 2); } return obj; } -R_API ut64 r_bin_java_methodhandle_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_methodhandle_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; size += 1; - //obj->info.cp_method_handle.reference_index = R_BIN_JAVA_USHORT(buffer, 2); + //obj->info.cp_method_handle.reference_index = R_BIN_JAVA_USHORT (buffer, 2); size += 2; return size; } -R_API RBinJavaCPTypeObj* r_bin_java_invokedynamic_cp_new(RBinJavaObj *bin, ut8* buffer, ut64 sz){ +R_API RBinJavaCPTypeObj* r_bin_java_invokedynamic_cp_new (RBinJavaObj *bin, ut8* buffer, ut64 sz) { ut8 tag = buffer[0]; RBinJavaCPTypeObj *obj = NULL; int quick_check = 0; quick_check = r_bin_java_quick_check(R_BIN_JAVA_CP_INVOKEDYNAMIC, tag, sz, "RBinJavaCPTypeMethodHandle" ); - if (quick_check > 0){ + if (quick_check > 0) { return obj; } - obj = (RBinJavaCPTypeObj *) malloc(sizeof(RBinJavaCPTypeObj)); - if (obj){ - memset(obj, 0, sizeof(RBinJavaCPTypeObj)); + obj = (RBinJavaCPTypeObj *) malloc (sizeof (RBinJavaCPTypeObj)); + if (obj) { + memset (obj, 0, sizeof (RBinJavaCPTypeObj)); - obj->metas = (RBinJavaMetaInfo *) malloc(sizeof(RBinJavaMetaInfo)); + obj->metas = (RBinJavaMetaInfo *) malloc (sizeof (RBinJavaMetaInfo)); obj->metas->type_info = (void *)&R_BIN_JAVA_CP_METAS[tag]; - obj->name = r_str_dup(NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name);; + obj->name = r_str_dup (NULL, (const char *) R_BIN_JAVA_CP_METAS[tag].name);; obj->tag = tag; - obj->info.cp_invoke_dynamic.bootstrap_method_attr_index = R_BIN_JAVA_USHORT(buffer, 1); - obj->info.cp_invoke_dynamic.name_and_type_index = R_BIN_JAVA_USHORT(buffer, 3); + obj->info.cp_invoke_dynamic.bootstrap_method_attr_index = R_BIN_JAVA_USHORT (buffer, 1); + obj->info.cp_invoke_dynamic.name_and_type_index = R_BIN_JAVA_USHORT (buffer, 3); } return obj; } -R_API ut64 r_bin_java_invokedynamic_cp_calc_size(RBinJavaCPTypeObj* obj){ +R_API ut64 r_bin_java_invokedynamic_cp_calc_size(RBinJavaCPTypeObj* obj) { ut64 size = 0; size += 1; - //obj->info.cp_invoke_dynamic.bootstrap_method_attr_index = R_BIN_JAVA_USHORT(buffer, 1); + //obj->info.cp_invoke_dynamic.bootstrap_method_attr_index = R_BIN_JAVA_USHORT (buffer, 1); size += 2; - //obj->info.cp_invoke_dynamic.name_and_type_index = R_BIN_JAVA_USHORT(buffer, 3); + //obj->info.cp_invoke_dynamic.name_and_type_index = R_BIN_JAVA_USHORT (buffer, 3); size += 2; return size; } @@ -4274,130 +4311,130 @@ R_API ut64 r_bin_java_invokedynamic_cp_calc_size(RBinJavaCPTypeObj* obj){ // End new Constant Pool types // Start free Constant Pool types -R_API void r_bin_java_default_free(RBinJavaCPTypeObj *obj){ - if(obj){ - if(obj->metas) free(obj->metas); - if(obj->name) free(obj->name); - if(obj->value) free(obj->value); - free(obj); +R_API void r_bin_java_default_free (RBinJavaCPTypeObj *obj) { + if(obj) { + if(obj->metas) free (obj->metas); + if(obj->name) free (obj->name); + if(obj->value) free (obj->value); + free (obj); } } -R_API void r_bin_java_utf8_info_free(RBinJavaCPTypeObj *obj){ - if(obj){ +R_API void r_bin_java_utf8_info_free (RBinJavaCPTypeObj *obj) { + if(obj) { if(obj->metas) - free(obj->metas); + free (obj->metas); if (obj->info.cp_utf8.bytes) - free(obj->info.cp_utf8.bytes); - free(obj); + free (obj->info.cp_utf8.bytes); + free (obj); } } // Deallocs for type objects -R_API void r_bin_java_obj_free(RBinJavaCPTypeObj *obj){ - ( (RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); +R_API void r_bin_java_obj_free (RBinJavaCPTypeObj *obj) { + ( (RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); } -R_API void r_bin_java_print_attr_summary(RBinJavaAttrInfo *attr){ - if (attr == NULL){ +R_API void r_bin_java_print_attr_summary(RBinJavaAttrInfo *attr) { + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *.\n"); return; } - ((RBinJavaAttrMetas *) attr->metas->type_info)->allocs->print_summary(attr); + ((RBinJavaAttrMetas *) attr->metas->type_info)->allocs->print_summary (attr); } -R_API void r_bin_java_print_source_debug_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_source_debug_attr_summary(RBinJavaAttrInfo *attr) { ut32 i = 0; - if (attr == NULL){ + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaSourceDebugExtensionAttr *.\n"); return; } - printf("Source Debug Extension Attribute information:\n"); - printf(" Attribute Offset: 0x%08llx\n", attr->file_offset); - printf(" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); - printf(" Extension length: %d\n", attr->length); - printf(" Source Debug Extension value: \n"); + printf ("Source Debug Extension Attribute information:\n"); + printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); + printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); + printf (" Extension length: %d\n", attr->length); + printf (" Source Debug Extension value: \n"); - for (i = 0; i < attr->length; i++){ - printf("%c", attr->info.debug_extensions.debug_extension[i]); + for (i = 0; i < attr->length; i++) { + printf ("%c", attr->info.debug_extensions.debug_extension[i]); } - printf("\n Source Debug Extension End\n"); + printf ("\n Source Debug Extension End\n"); } -R_API void r_bin_java_print_unknown_attr_summary(RBinJavaAttrInfo *attr){ - if (attr == NULL){ +R_API void r_bin_java_print_unknown_attr_summary(RBinJavaAttrInfo *attr) { + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *Unknown.\n"); return; } - printf("Unknown Attribute information:\n"); - printf(" Attribute Offset: 0x%08llx\n", attr->file_offset); - printf(" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); - printf(" Attribute length: %d\n", attr->length); + printf ("Unknown Attribute information:\n"); + printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); + printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); + printf (" Attribute length: %d\n", attr->length); } -R_API void r_bin_java_print_code_exceptions_attr_summary(RBinJavaExceptionEntry *exc_entry){ - if (exc_entry == NULL){ +R_API void r_bin_java_print_code_exceptions_attr_summary(RBinJavaExceptionEntry *exc_entry) { + if (exc_entry == NULL) { eprintf ("Attempting to print an invalid RBinJavaExceptionEntry *.\n"); return; } - printf(" Exception Table Entry Information\n"); - printf (" offset: 0x%08llx\n", exc_entry->file_offset); - printf(" catch_type: %d\n", exc_entry->catch_type); - printf(" start_pc: 0x%04x\n", exc_entry->start_pc); - printf(" end_pc: 0x%04x\n", exc_entry->end_pc); - printf(" handler_pc: 0x%04x\n", exc_entry->handler_pc); + printf (" Exception Table Entry Information\n"); + printf (" offset: 0x%08llx\n", exc_entry->file_offset); + printf (" catch_type: %d\n", exc_entry->catch_type); + printf (" start_pc: 0x%04x\n", exc_entry->start_pc); + printf (" end_pc: 0x%04x\n", exc_entry->end_pc); + printf (" handler_pc: 0x%04x\n", exc_entry->handler_pc); } // End free Constant Pool types -R_API void r_bin_java_print_code_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_code_attr_summary(RBinJavaAttrInfo *attr) { RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaExceptionEntry* exc_entry = NULL; RBinJavaAttrInfo *_attr = NULL; - if (attr == NULL){ + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *Code.\n"); return; } - printf("Code Attribute information:\n"); - printf(" Attribute Offset: 0x%08llx\n", attr->file_offset); - printf(" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); - printf(" Attribute length: %d, Attribute Count: %d\n", attr->length, attr->info.code_attr.attributes_count); - printf(" Max Stack: %d\n", attr->info.code_attr.max_stack); - printf(" Max Locals: %d\n", attr->info.code_attr.max_locals); - printf(" Code Length: %d\n", attr->info.code_attr.code_length); - printf(" Code At Offset: 0x%08"PFMT64x"\n", (ut64)attr->info.code_attr.code_offset); + printf ("Code Attribute information:\n"); + printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); + printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); + printf (" Attribute length: %d, Attribute Count: %d\n", attr->length, attr->info.code_attr.attributes_count); + printf (" Max Stack: %d\n", attr->info.code_attr.max_stack); + printf (" Max Locals: %d\n", attr->info.code_attr.max_locals); + printf (" Code Length: %d\n", attr->info.code_attr.code_length); + printf (" Code At Offset: 0x%08"PFMT64x"\n", (ut64)attr->info.code_attr.code_offset); printf ("Code Attribute Exception table information:\n"); - printf(" Exception table length: %d\n",attr->info.code_attr.exception_table_length); - if(attr->info.code_attr.exception_table){ + printf (" Exception table length: %d\n",attr->info.code_attr.exception_table_length); + if(attr->info.code_attr.exception_table) { // Delete the attr entries - r_list_foreach_safe(attr->info.code_attr.exception_table, iter, iter_tmp, exc_entry){ - r_bin_java_print_code_exceptions_attr_summary(exc_entry); + r_list_foreach_safe (attr->info.code_attr.exception_table, iter, iter_tmp, exc_entry) { + r_bin_java_print_code_exceptions_attr_summary (exc_entry); } } - printf(" Implicit Method Stack Frame: \n"); - r_bin_java_print_stack_map_frame_summary(attr->info.code_attr.implicit_frame); + printf (" Implicit Method Stack Frame: \n"); + r_bin_java_print_stack_map_frame_summary (attr->info.code_attr.implicit_frame); printf ("Code Attribute Attributes information:\n"); - if(attr->info.code_attr.attributes && attr->info.code_attr.attributes_count > 0){ - printf(" Code Attribute Attributes count: %d\n",attr->info.code_attr.attributes_count); + if(attr->info.code_attr.attributes && attr->info.code_attr.attributes_count > 0) { + printf (" Code Attribute Attributes count: %d\n",attr->info.code_attr.attributes_count); - r_list_foreach_safe(attr->info.code_attr.attributes, iter, iter_tmp, _attr){ - r_bin_java_print_attr_summary(_attr); + r_list_foreach_safe (attr->info.code_attr.attributes, iter, iter_tmp, _attr) { + r_bin_java_print_attr_summary (_attr); } } } -R_API void r_bin_java_print_constant_value_attr_summary(RBinJavaAttrInfo *attr){ - if (attr == NULL){ +R_API void r_bin_java_print_constant_value_attr_summary(RBinJavaAttrInfo *attr) { + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *ConstantValue.\n"); return; } @@ -4409,8 +4446,8 @@ R_API void r_bin_java_print_constant_value_attr_summary(RBinJavaAttrInfo *attr){ } -R_API void r_bin_java_print_deprecated_attr_summary(RBinJavaAttrInfo *attr){ - if (attr == NULL){ +R_API void r_bin_java_print_deprecated_attr_summary(RBinJavaAttrInfo *attr) { + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *Deperecated.\n"); return; } @@ -4420,8 +4457,8 @@ R_API void r_bin_java_print_deprecated_attr_summary(RBinJavaAttrInfo *attr){ printf (" Attribute length: %d\n", attr->length); } -R_API void r_bin_java_print_enclosing_methods_attr_summary(RBinJavaAttrInfo *attr){ - if (attr == NULL){ +R_API void r_bin_java_print_enclosing_methods_attr_summary(RBinJavaAttrInfo *attr) { + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *Deperecated.\n"); return; } @@ -4436,9 +4473,9 @@ R_API void r_bin_java_print_enclosing_methods_attr_summary(RBinJavaAttrInfo *att printf (" Method Name and Desc : %s %s\n", attr->info.enclosing_method_attr.method_name, attr->info.enclosing_method_attr.method_descriptor); } -R_API void r_bin_java_print_exceptions_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_exceptions_attr_summary(RBinJavaAttrInfo *attr) { ut32 i = 0; - if (attr == NULL){ + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *Exceptions.\n"); return; } @@ -4446,15 +4483,15 @@ R_API void r_bin_java_print_exceptions_attr_summary(RBinJavaAttrInfo *attr){ printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); - for (i = 0; i < attr->length; i++){ + for (i = 0; i < attr->length; i++) { printf (" Exceptions Attribute Index[%d]: %d\n", i, attr->info.exceptions_attr.exception_idx_table[i]); } } -R_API void r_bin_java_print_classes_attr_summary(RBinJavaClassesAttribute *icattr){ - if (icattr == NULL){ +R_API void r_bin_java_print_classes_attr_summary(RBinJavaClassesAttribute *icattr) { + if (icattr == NULL) { eprintf ("Attempting to print an invalid RBinJavaClassesAttribute* (InnerClasses element).\n"); return; } @@ -4465,19 +4502,19 @@ R_API void r_bin_java_print_classes_attr_summary(RBinJavaClassesAttribute *icatt printf (" Inner Classes Class Attribute Class inner_class_access_flags: %d\n", icattr->inner_class_access_flags); printf (" Inner Classes Class Attribute Class outer_class_info_idx: %d\n", icattr->outer_class_info_idx); printf (" Inner Classes Class Field Information:\n"); - r_bin_java_print_field_summary(icattr->clint_field); + r_bin_java_print_field_summary (icattr->clint_field); printf (" Inner Classes Class Field Information:\n"); - r_bin_java_print_field_summary(icattr->clint_field); + r_bin_java_print_field_summary (icattr->clint_field); printf (" Inner Classes Class Attr Info Information:\n"); - r_bin_java_print_attr_summary(icattr->clint_attr); + r_bin_java_print_attr_summary (icattr->clint_attr); } -R_API void r_bin_java_print_inner_classes_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_inner_classes_attr_summary(RBinJavaAttrInfo *attr) { RBinJavaClassesAttribute *icattr; RListIter *iter, *iter_tmp; - if (attr == NULL){ + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *InnerClasses.\n"); return; } @@ -4487,14 +4524,14 @@ R_API void r_bin_java_print_inner_classes_attr_summary(RBinJavaAttrInfo *attr){ printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); - r_list_foreach_safe(attr->info.inner_classes_attr.classes, iter, iter_tmp, icattr){ - r_bin_java_print_classes_attr_summary(icattr); + r_list_foreach_safe (attr->info.inner_classes_attr.classes, iter, iter_tmp, icattr) { + r_bin_java_print_classes_attr_summary (icattr); } } -R_API void r_bin_java_print_line_number_attr_summary(RBinJavaLineNumberAttribute *lnattr){ - if (lnattr == NULL){ +R_API void r_bin_java_print_line_number_attr_summary(RBinJavaLineNumberAttribute *lnattr) { + if (lnattr == NULL) { eprintf ("Attempting to print an invalid RBinJavaLineNumberAttribute *.\n"); return; } @@ -4504,10 +4541,10 @@ R_API void r_bin_java_print_line_number_attr_summary(RBinJavaLineNumberAttribute } -R_API void r_bin_java_print_line_number_table_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_line_number_table_attr_summary(RBinJavaAttrInfo *attr) { RBinJavaLineNumberAttribute *lnattr; RListIter *iter, *iter_tmp; - if (attr == NULL){ + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *LineNumberTable.\n"); return; } @@ -4515,14 +4552,14 @@ R_API void r_bin_java_print_line_number_table_attr_summary(RBinJavaAttrInfo *att printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); - r_list_foreach_safe(attr->info.line_number_table_attr.line_number_table, iter, iter_tmp, lnattr){ - r_bin_java_print_line_number_attr_summary(lnattr); + r_list_foreach_safe (attr->info.line_number_table_attr.line_number_table, iter, iter_tmp, lnattr) { + r_bin_java_print_line_number_attr_summary (lnattr); } } -R_API void r_bin_java_print_local_variable_attr_summary(RBinJavaLocalVariableAttribute *lvattr){ - if (lvattr == NULL){ +R_API void r_bin_java_print_local_variable_attr_summary(RBinJavaLocalVariableAttribute *lvattr) { + if (lvattr == NULL) { eprintf ("Attempting to print an invalid RBinJavaLocalVariableAttribute *.\n"); return; } @@ -4536,10 +4573,10 @@ R_API void r_bin_java_print_local_variable_attr_summary(RBinJavaLocalVariableAtt printf (" Local Variable Attribute index: %d\n", lvattr->index); } -R_API void r_bin_java_print_local_variable_table_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_local_variable_table_attr_summary(RBinJavaAttrInfo *attr) { RBinJavaLocalVariableAttribute *lvattr; RListIter *iter, *iter_tmp; - if (attr == NULL){ + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *LocalVariableTable.\n"); return; } @@ -4547,13 +4584,13 @@ R_API void r_bin_java_print_local_variable_table_attr_summary(RBinJavaAttrInfo * printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); - r_list_foreach_safe(attr->info.local_variable_table_attr.local_variable_table, iter, iter_tmp, lvattr){ - r_bin_java_print_local_variable_attr_summary(lvattr); + r_list_foreach_safe (attr->info.local_variable_table_attr.local_variable_table, iter, iter_tmp, lvattr) { + r_bin_java_print_local_variable_attr_summary (lvattr); } } -R_API void r_bin_java_print_local_variable_type_attr_summary(RBinJavaLocalVariableTypeAttribute *lvattr){ - if (lvattr == NULL){ +R_API void r_bin_java_print_local_variable_type_attr_summary(RBinJavaLocalVariableTypeAttribute *lvattr) { + if (lvattr == NULL) { eprintf ("Attempting to print an invalid RBinJavaLocalVariableTypeAttribute *.\n"); return; } @@ -4566,10 +4603,10 @@ R_API void r_bin_java_print_local_variable_type_attr_summary(RBinJavaLocalVariab printf (" Local Variable Type Attribute signature: %s\n", lvattr->signature); printf (" Local Variable Type Attribute index: %d\n", lvattr->index); } -R_API void r_bin_java_print_local_variable_type_table_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_local_variable_type_table_attr_summary(RBinJavaAttrInfo *attr) { RBinJavaLocalVariableTypeAttribute *lvtattr; RListIter *iter, *iter_tmp; - if (attr == NULL){ + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *LocalVariableTable.\n"); return; } @@ -4577,13 +4614,13 @@ R_API void r_bin_java_print_local_variable_type_table_attr_summary(RBinJavaAttrI printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); - r_list_foreach_safe(attr->info.local_variable_type_table_attr.local_variable_table, iter, iter_tmp, lvtattr){ - r_bin_java_print_local_variable_type_attr_summary(lvtattr); + r_list_foreach_safe (attr->info.local_variable_type_table_attr.local_variable_table, iter, iter_tmp, lvtattr) { + r_bin_java_print_local_variable_type_attr_summary (lvtattr); } } -R_API void r_bin_java_print_signature_attr_summary(RBinJavaAttrInfo *attr){ - if (attr == NULL){ +R_API void r_bin_java_print_signature_attr_summary(RBinJavaAttrInfo *attr) { + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *SignatureAttr.\n"); return; } @@ -4596,8 +4633,8 @@ R_API void r_bin_java_print_signature_attr_summary(RBinJavaAttrInfo *attr){ } -R_API void r_bin_java_print_source_code_file_attr_summary(RBinJavaAttrInfo *attr){ - if (attr == NULL){ +R_API void r_bin_java_print_source_code_file_attr_summary(RBinJavaAttrInfo *attr) { + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *SourceFile.\n"); return; } @@ -4608,8 +4645,8 @@ R_API void r_bin_java_print_source_code_file_attr_summary(RBinJavaAttrInfo *attr printf (" Source File Index: %d\n", attr->info.source_file_attr.sourcefile_idx); } -R_API void r_bin_java_print_synthetic_attr_summary(RBinJavaAttrInfo *attr){ - if (attr == NULL){ +R_API void r_bin_java_print_synthetic_attr_summary(RBinJavaAttrInfo *attr) { + if (attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaAttrInfo *Synthetic.\n"); return; } @@ -4620,12 +4657,12 @@ R_API void r_bin_java_print_synthetic_attr_summary(RBinJavaAttrInfo *attr){ printf (" Attribute Index: %d\n", attr->info.source_file_attr.sourcefile_idx); } -R_API void r_bin_java_print_stack_map_table_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_stack_map_table_attr_summary(RBinJavaAttrInfo *attr) { RListIter *iter, *iter_tmp; RList *ptrList; RBinJavaStackMapFrame *frame; - if(attr == NULL){ + if(attr == NULL) { eprintf ("Attempting to print an invalid RBinJavaStackMapTableAttr* .\n"); return; } @@ -4640,72 +4677,72 @@ R_API void r_bin_java_print_stack_map_table_attr_summary(RBinJavaAttrInfo *attr) ptrList = attr->info.stack_map_table_attr.stack_map_frame_entries; - if (ptrList){ - r_list_foreach_safe(ptrList, iter, iter_tmp, frame){ - r_bin_java_print_stack_map_frame_summary(frame); + if (ptrList) { + r_list_foreach_safe (ptrList, iter, iter_tmp, frame) { + r_bin_java_print_stack_map_frame_summary (frame); } } } -R_API void r_bin_java_print_stack_map_append_frame_summary(RBinJavaStackMapFrame *obj){ +R_API void r_bin_java_print_stack_map_append_frame_summary(RBinJavaStackMapFrame *obj) { RListIter *iter, *iter_tmp; RList *ptrList; RBinJavaVerificationObj *ver_obj; - printf("Stack Map Frame Information\n"); - printf(" Tag Value = 0x%02x Name: %s\n", obj->tag, ((RBinJavaStackMapFrameMetas *) obj->metas->type_info)->name); - printf(" Offset: 0x%08llx\n", obj->file_offset); - printf(" Local Variable Count = 0x%04x\n", obj->number_of_locals); - printf(" Local Variables:\n"); + printf ("Stack Map Frame Information\n"); + printf (" Tag Value = 0x%02x Name: %s\n", obj->tag, ((RBinJavaStackMapFrameMetas *) obj->metas->type_info)->name); + printf (" Offset: 0x%08llx\n", obj->file_offset); + printf (" Local Variable Count = 0x%04x\n", obj->number_of_locals); + printf (" Local Variables:\n"); ptrList = obj->local_items; - r_list_foreach_safe(ptrList, iter, iter_tmp, ver_obj){ - r_bin_java_print_verification_info_summary(ver_obj); + r_list_foreach_safe (ptrList, iter, iter_tmp, ver_obj) { + r_bin_java_print_verification_info_summary (ver_obj); } - printf(" Stack Items Count = 0x%04x\n", obj->number_of_stack_items); - printf(" Stack Items:\n"); + printf (" Stack Items Count = 0x%04x\n", obj->number_of_stack_items); + printf (" Stack Items:\n"); ptrList = obj->stack_items; - r_list_foreach_safe(ptrList, iter, iter_tmp, ver_obj){ - r_bin_java_print_verification_info_summary(ver_obj); + r_list_foreach_safe (ptrList, iter, iter_tmp, ver_obj) { + r_bin_java_print_verification_info_summary (ver_obj); } } -R_API void r_bin_java_print_stack_map_frame_summary(RBinJavaStackMapFrame *obj){ +R_API void r_bin_java_print_stack_map_frame_summary(RBinJavaStackMapFrame *obj) { RListIter *iter, *iter_tmp; RList *ptrList; RBinJavaVerificationObj *ver_obj; - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaStackMapFrame* .\n"); return; } - printf("Stack Map Frame Information\n"); - printf(" Tag Value = 0x%02x Name: %s\n", obj->tag, ((RBinJavaStackMapFrameMetas *) obj->metas->type_info)->name); - printf(" Offset: 0x%08llx\n", obj->file_offset); - printf(" Local Variable Count = 0x%04x\n", obj->number_of_locals); - printf(" Stack Items Count = 0x%04x\n", obj->number_of_stack_items); + printf ("Stack Map Frame Information\n"); + printf (" Tag Value = 0x%02x Name: %s\n", obj->tag, ((RBinJavaStackMapFrameMetas *) obj->metas->type_info)->name); + printf (" Offset: 0x%08llx\n", obj->file_offset); + printf (" Local Variable Count = 0x%04x\n", obj->number_of_locals); + printf (" Stack Items Count = 0x%04x\n", obj->number_of_stack_items); - printf(" Local Variables:\n"); + printf (" Local Variables:\n"); ptrList = obj->local_items; - r_list_foreach_safe(ptrList, iter, iter_tmp, ver_obj){ - r_bin_java_print_verification_info_summary(ver_obj); + r_list_foreach_safe (ptrList, iter, iter_tmp, ver_obj) { + r_bin_java_print_verification_info_summary (ver_obj); } - printf(" Stack Items:\n"); + printf (" Stack Items:\n"); ptrList = obj->stack_items; - r_list_foreach_safe(ptrList, iter, iter_tmp, ver_obj){ - r_bin_java_print_verification_info_summary(ver_obj); + r_list_foreach_safe (ptrList, iter, iter_tmp, ver_obj) { + r_bin_java_print_verification_info_summary (ver_obj); } } -R_API void r_bin_java_print_verification_info_summary(RBinJavaVerificationObj *obj){ +R_API void r_bin_java_print_verification_info_summary(RBinJavaVerificationObj *obj) { ut8 tag_value = R_BIN_JAVA_STACKMAP_UNKNOWN; - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaVerificationObj* .\n"); return; } @@ -4713,15 +4750,15 @@ R_API void r_bin_java_print_verification_info_summary(RBinJavaVerificationObj *o if (obj->tag < R_BIN_JAVA_STACKMAP_UNKNOWN) tag_value = obj->tag; - printf("Verification Information\n"); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" Tag Value = 0x%02x\n", obj->tag); - printf(" Name = %s\n", R_BIN_JAVA_VERIFICATION_METAS[tag_value].name); + printf ("Verification Information\n"); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" Tag Value = 0x%02x\n", obj->tag); + printf (" Name = %s\n", R_BIN_JAVA_VERIFICATION_METAS[tag_value].name); - if (obj->tag == R_BIN_JAVA_STACKMAP_OBJECT){ - printf(" Object Constant Pool Index = 0x%x\n", obj->info.obj_val_cp_idx); - }else if(obj->tag == R_BIN_JAVA_STACKMAP_UNINIT){ - printf(" Uninitialized Object offset in code = 0x%x\n", obj->info.uninit_offset); + if (obj->tag == R_BIN_JAVA_STACKMAP_OBJECT) { + printf (" Object Constant Pool Index = 0x%x\n", obj->info.obj_val_cp_idx); + }else if(obj->tag == R_BIN_JAVA_STACKMAP_UNINIT) { + printf (" Uninitialized Object offset in code = 0x%x\n", obj->info.uninit_offset); } } @@ -4729,224 +4766,224 @@ R_API void r_bin_java_print_verification_info_summary(RBinJavaVerificationObj *o -R_API void r_bin_java_print_field_summary(RBinJavaField *field){ +R_API void r_bin_java_print_field_summary(RBinJavaField *field) { RBinJavaAttrInfo *attr; RListIter *iter, *iter_tmp; - if (field == NULL){ + if (field == NULL) { eprintf ("Attempting to print an invalid RBinJavaField* Field.\n"); return; } - if(field && field->type == R_BIN_JAVA_FIELD_TYPE_METHOD){ - r_bin_java_print_method_summary(field); + if(field && field->type == R_BIN_JAVA_FIELD_TYPE_METHOD) { + r_bin_java_print_method_summary (field); return; - }/*else if(field && field->type == R_BIN_JAVA_FIELD_TYPE_INTERFACE){ + }/*else if(field && field->type == R_BIN_JAVA_FIELD_TYPE_INTERFACE) { r_bin_java_print_interface_summary(field); return; }*/ - printf("Field Summary Information:\n"); - printf(" File offset: 0x%08llx", field->file_offset); - printf(" Access Flags: %d\n", field->flags); - printf(" Name Index: %d (%s)\n", field->name_idx, field->name); - printf(" Descriptor Index: %d (%s)\n", field->descriptor_idx, field->descriptor); - printf(" Field Attributes Count: %d\n", field->attr_count); - printf(" Field Attributes:\n"); - r_list_foreach_safe(field->attributes, iter, iter_tmp, attr){ - r_bin_java_print_attr_summary(attr); + printf ("Field Summary Information:\n"); + printf (" File offset: 0x%08llx", field->file_offset); + printf (" Access Flags: %d\n", field->flags); + printf (" Name Index: %d (%s)\n", field->name_idx, field->name); + printf (" Descriptor Index: %d (%s)\n", field->descriptor_idx, field->descriptor); + printf (" Field Attributes Count: %d\n", field->attr_count); + printf (" Field Attributes:\n"); + r_list_foreach_safe (field->attributes, iter, iter_tmp, attr) { + r_bin_java_print_attr_summary (attr); } } -R_API void r_bin_java_print_method_summary(RBinJavaField *field){ +R_API void r_bin_java_print_method_summary(RBinJavaField *field) { RBinJavaAttrInfo *attr; RListIter *iter, *iter_tmp; - if (field == NULL){ + if (field == NULL) { eprintf ("Attempting to print an invalid RBinJavaField* Method.\n"); return; } - printf("Method Summary Information:\n"); - printf(" File offset: 0x%08llx", field->file_offset); - printf(" Access Flags: %d\n", field->flags); - printf(" Name Index: %d (%s)\n", field->name_idx, field->name); - printf(" Descriptor Index: %d (%s)\n", field->descriptor_idx, field->descriptor); - printf(" Method Attributes Count: %d\n", field->attr_count); - printf(" Method Attributes:\n"); + printf ("Method Summary Information:\n"); + printf (" File offset: 0x%08llx", field->file_offset); + printf (" Access Flags: %d\n", field->flags); + printf (" Name Index: %d (%s)\n", field->name_idx, field->name); + printf (" Descriptor Index: %d (%s)\n", field->descriptor_idx, field->descriptor); + printf (" Method Attributes Count: %d\n", field->attr_count); + printf (" Method Attributes:\n"); - r_list_foreach_safe(field->attributes, iter, iter_tmp, attr){ - r_bin_java_print_attr_summary(attr); + r_list_foreach_safe (field->attributes, iter, iter_tmp, attr) { + r_bin_java_print_attr_summary (attr); } } /* -R_API void r_bin_java_print_interface_summary(ut16 idx){//RBinJavaField *field){ +R_API void r_bin_java_print_interface_summary(ut16 idx) {//RBinJavaField *field) { RBinJavaAttrInfo *attr; RBinJavaCPTypeObj *class_info; RListIter *iter, *iter_tmp; - if (field == NULL){ + if (field == NULL) { eprintf ("Attempting to print an invalid RBinJavaField* Interface.\n"); return; } - printf("Interface Summary Information:\n"); - printf(" File offset: 0x%08llx", field->file_offset); - printf(" Access Flags: %d\n", field->flags); - printf(" Name Index: %d (%s)\n", field->name_idx, field->name); - printf(" Descriptor Index: %d (%s)\n", field->descriptor_idx, field->descriptor); - printf(" Interface Attributes Count: %d\n", field->attr_count); - printf(" Interface Attributes:\n"); - r_list_foreach_safe(field->attributes, iter, iter_tmp, attr){ + printf ("Interface Summary Information:\n"); + printf (" File offset: 0x%08llx", field->file_offset); + printf (" Access Flags: %d\n", field->flags); + printf (" Name Index: %d (%s)\n", field->name_idx, field->name); + printf (" Descriptor Index: %d (%s)\n", field->descriptor_idx, field->descriptor); + printf (" Interface Attributes Count: %d\n", field->attr_count); + printf (" Interface Attributes:\n"); + r_list_foreach_safe (field->attributes, iter, iter_tmp, attr) { r_bin_java_print_attr_summary(attr); } } */ -R_API void r_bin_java_print_interfacemethodref_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_interfacemethodref_cp_summary(RBinJavaCPTypeObj* obj) { - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* InterfaceMethodRef.\n"); return; } - printf("InterfaceMethodRef ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" Class Index = %d\n", obj->info.cp_interface.class_idx); - printf(" Name and type Index = %d\n", obj->info.cp_interface.name_and_type_idx); + printf ("InterfaceMethodRef ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" Class Index = %d\n", obj->info.cp_interface.class_idx); + printf (" Name and type Index = %d\n", obj->info.cp_interface.name_and_type_idx); } -R_API void r_bin_java_print_methodhandle_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_methodhandle_cp_summary(RBinJavaCPTypeObj* obj) { ut8 ref_kind; - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* RBinJavaCPTypeMethodHandle.\n"); return; } ref_kind = obj->info.cp_method_handle.reference_kind; - printf("MethodHandle ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" Reference Kind = (0x%02x) %s\n", ref_kind, R_BIN_JAVA_REF_METAS[ref_kind].name); - printf(" Reference Index = %d\n", obj->info.cp_method_handle.reference_index); + printf ("MethodHandle ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" Reference Kind = (0x%02x) %s\n", ref_kind, R_BIN_JAVA_REF_METAS[ref_kind].name); + printf (" Reference Index = %d\n", obj->info.cp_method_handle.reference_index); } -R_API void r_bin_java_print_methodtype_cp_summary(RBinJavaCPTypeObj* obj){ - if(obj == NULL){ +R_API void r_bin_java_print_methodtype_cp_summary(RBinJavaCPTypeObj* obj) { + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* RBinJavaCPTypeMethodType.\n"); return; } - printf("MethodType ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); + printf ("MethodType ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); - printf(" Descriptor Index = 0x%02x\n", obj->info.cp_method_type.descriptor_index); + printf (" Descriptor Index = 0x%02x\n", obj->info.cp_method_type.descriptor_index); } -R_API void r_bin_java_print_invokedynamic_cp_summary(RBinJavaCPTypeObj* obj){ - if(obj == NULL){ +R_API void r_bin_java_print_invokedynamic_cp_summary(RBinJavaCPTypeObj* obj) { + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* RBinJavaCPTypeInvokeDynamic.\n"); return; } - printf("InvokeDynamic ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" Bootstrap Method Attr Index = (0x%02x)\n", obj->info.cp_invoke_dynamic.bootstrap_method_attr_index); - printf(" Bootstrap Name and Type Index = (0x%02x)\n", obj->info.cp_invoke_dynamic.name_and_type_index); + printf ("InvokeDynamic ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" Bootstrap Method Attr Index = (0x%02x)\n", obj->info.cp_invoke_dynamic.bootstrap_method_attr_index); + printf (" Bootstrap Name and Type Index = (0x%02x)\n", obj->info.cp_invoke_dynamic.name_and_type_index); } -R_API void r_bin_java_print_methodref_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_methodref_cp_summary(RBinJavaCPTypeObj* obj) { - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* MethodRef.\n"); return; } - printf("MethodRef ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" Class Index = %d\n", obj->info.cp_method.class_idx); - printf(" Name and type Index = %d\n", obj->info.cp_method.name_and_type_idx); + printf ("MethodRef ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" Class Index = %d\n", obj->info.cp_method.class_idx); + printf (" Name and type Index = %d\n", obj->info.cp_method.name_and_type_idx); } -R_API void r_bin_java_print_fieldref_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_fieldref_cp_summary(RBinJavaCPTypeObj* obj) { - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* FieldRef.\n"); return; } - printf("FieldRef ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" Class Index = %d\n", obj->info.cp_field.class_idx); - printf(" Name and type Index = %d\n", obj->info.cp_field.name_and_type_idx); + printf ("FieldRef ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" Class Index = %d\n", obj->info.cp_field.class_idx); + printf (" Name and type Index = %d\n", obj->info.cp_field.name_and_type_idx); } -R_API void r_bin_java_print_classref_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_classref_cp_summary(RBinJavaCPTypeObj* obj) { - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* ClassRef.\n"); return; } - printf("ClassRef ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" Name Index = %d\n", obj->info.cp_class.name_idx); + printf ("ClassRef ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" Name Index = %d\n", obj->info.cp_class.name_idx); } -R_API void r_bin_java_print_string_cp_summary(RBinJavaCPTypeObj* obj){ - if(obj == NULL){ +R_API void r_bin_java_print_string_cp_summary(RBinJavaCPTypeObj* obj) { + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* String.\n"); return; } - printf("String ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" String Index = %d\n", obj->info.cp_string.string_idx); + printf ("String ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" String Index = %d\n", obj->info.cp_string.string_idx); } -R_API void r_bin_java_print_integer_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_integer_cp_summary(RBinJavaCPTypeObj* obj) { ut8 *b = NULL; - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* Integer.\n"); return; } b = obj->info.cp_integer.bytes.raw; - printf("Integer ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" bytes = %02x %02x %02x %02x\n", b[0], b[1], b[2], b[3]); - printf(" integer = %d\n", R_BIN_JAVA_UINT(obj->info.cp_integer.bytes.raw, 0)); + printf ("Integer ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" bytes = %02x %02x %02x %02x\n", b[0], b[1], b[2], b[3]); + printf (" integer = %d\n", R_BIN_JAVA_UINT (obj->info.cp_integer.bytes.raw, 0)); } -R_API void r_bin_java_print_float_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_float_cp_summary(RBinJavaCPTypeObj* obj) { ut8 *b = NULL; - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* Double.\n"); return; } b = obj->info.cp_float.bytes.raw; - printf("Float ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" bytes = %02x %02x %02x %02x\n", b[0], b[1], b[2], b[3]); - printf(" float = %f\n", R_BIN_JAVA_FLOAT(obj->info.cp_float.bytes.raw, 0)); + printf ("Float ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" bytes = %02x %02x %02x %02x\n", b[0], b[1], b[2], b[3]); + printf (" float = %f\n", R_BIN_JAVA_FLOAT(obj->info.cp_float.bytes.raw, 0)); } -R_API void r_bin_java_print_long_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_long_cp_summary(RBinJavaCPTypeObj* obj) { ut8 *b = NULL; - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* Long.\n"); return; } @@ -4954,17 +4991,17 @@ R_API void r_bin_java_print_long_cp_summary(RBinJavaCPTypeObj* obj){ b = obj->info.cp_long.bytes.raw; - printf("Long ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" High-bytes = %02x %02x %02x %02x\n", b[0], b[1], b[2], b[3]); - printf(" Low-bytes = %02x %02x %02x %02x\n", b[4], b[5], b[6], b[7]); - printf(" long = %llx\n", rbin_java_raw_to_long(obj->info.cp_long.bytes.raw, 0)); + printf ("Long ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" High-bytes = %02x %02x %02x %02x\n", b[0], b[1], b[2], b[3]); + printf (" Low-bytes = %02x %02x %02x %02x\n", b[4], b[5], b[6], b[7]); + printf (" long = %llx\n", rbin_java_raw_to_long(obj->info.cp_long.bytes.raw, 0)); } -R_API void r_bin_java_print_double_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_double_cp_summary(RBinJavaCPTypeObj* obj) { ut8 *b = NULL; - if(obj == NULL){ + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* Double.\n"); return; } @@ -4972,126 +5009,126 @@ R_API void r_bin_java_print_double_cp_summary(RBinJavaCPTypeObj* obj){ b = obj->info.cp_double.bytes.raw; - printf("Double ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" High-bytes = %02x %02x %02x %02x\n", b[0], b[1], b[2], b[3]); - printf(" Low-bytes = %02x %02x %02x %02x\n", b[4], b[5], b[6], b[7]); - printf(" double = %f\n", rbin_java_raw_to_double(obj->info.cp_double.bytes.raw, 0)); + printf ("Double ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" High-bytes = %02x %02x %02x %02x\n", b[0], b[1], b[2], b[3]); + printf (" Low-bytes = %02x %02x %02x %02x\n", b[4], b[5], b[6], b[7]); + printf (" double = %f\n", rbin_java_raw_to_double (obj->info.cp_double.bytes.raw, 0)); } -R_API void r_bin_java_print_name_and_type_cp_summary(RBinJavaCPTypeObj* obj){ - if(obj == NULL){ +R_API void r_bin_java_print_name_and_type_cp_summary(RBinJavaCPTypeObj* obj) { + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* Name_And_Type.\n"); return; } - printf("Name_And_Type ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" name_idx = (%d)\n", obj->info.cp_name_and_type.name_idx); - printf(" descriptor_idx = (%d)\n", obj->info.cp_name_and_type.descriptor_idx); + printf ("Name_And_Type ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" name_idx = (%d)\n", obj->info.cp_name_and_type.name_idx); + printf (" descriptor_idx = (%d)\n", obj->info.cp_name_and_type.descriptor_idx); } -R_API void r_bin_java_print_utf8_cp_summary(RBinJavaCPTypeObj* obj){ - if(obj == NULL){ +R_API void r_bin_java_print_utf8_cp_summary(RBinJavaCPTypeObj* obj) { + if(obj == NULL) { eprintf ("Attempting to print an invalid RBinJavaCPTypeObj* Utf8.\n"); return; } - printf("UTF8 ConstantPool Type (%d) ", obj->metas->ord); - printf(" Offset: 0x%08llx", obj->file_offset); - printf(" length = %d\n", obj->info.cp_utf8.length); + printf ("UTF8 ConstantPool Type (%d) ", obj->metas->ord); + printf (" Offset: 0x%08llx", obj->file_offset); + printf (" length = %d\n", obj->info.cp_utf8.length); // XXX - TODO UTF8 Interpretation - printf(" strlen(%lu) utf8 = %s\n", strlen( (const char *) obj->info.cp_utf8.bytes) ,(char *) obj->info.cp_utf8.bytes); + printf (" strlen(%lu) utf8 = %s\n", strlen ( (const char *) obj->info.cp_utf8.bytes) ,(char *) obj->info.cp_utf8.bytes); } -R_API void r_bin_java_print_null_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_null_cp_summary(RBinJavaCPTypeObj* obj) { printf ("Unknown ConstantPool Type Tag: 0x%04x .\n", obj->tag); } -R_API void r_bin_java_print_unknown_cp_summary(RBinJavaCPTypeObj* obj){ +R_API void r_bin_java_print_unknown_cp_summary(RBinJavaCPTypeObj* obj) { printf ("NULL ConstantPool Type.\n"); } -R_API void r_bin_java_stack_frame_default_free(RBinJavaStackMapFrame *stack_frame){ - if(stack_frame){ - if (stack_frame->metas){ - //((RBinJavaStackMapFrameMetas *) attr->metas->type_info)->allocs->delete_obj(stack_frame); - free(stack_frame->metas); +R_API void r_bin_java_stack_frame_default_free (RBinJavaStackMapFrame *stack_frame) { + if(stack_frame) { + if (stack_frame->metas) { + //((RBinJavaStackMapFrameMetas *) attr->metas->type_info)->allocs->delete_obj (stack_frame); + free (stack_frame->metas); stack_frame->metas = NULL; } - free(stack_frame); + free (stack_frame); stack_frame = NULL; } } -R_API void r_bin_java_stack_frame_do_nothing_free(RBinJavaStackMapFrame *stack_frame){} +R_API void r_bin_java_stack_frame_do_nothing_free (RBinJavaStackMapFrame *stack_frame) {} -R_API void r_bin_java_stack_frame_do_nothing_new(RBinJavaObj *bin, RBinJavaStackMapFrame *stack_frame, ut64 offset){} +R_API void r_bin_java_stack_frame_do_nothing_new (RBinJavaObj *bin, RBinJavaStackMapFrame *stack_frame, ut64 offset) {} -R_API RBinJavaElementValuePair* r_bin_java_element_pair_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaElementValuePair* r_bin_java_element_pair_new (ut8* buffer, ut64 sz, ut64 buf_offset) { RBinJavaElementValuePair *ev_pair = NULL; ut64 offset = 0; - ev_pair = (RBinJavaElementValuePair *) malloc(sizeof(RBinJavaElementValuePair)); + ev_pair = (RBinJavaElementValuePair *) malloc (sizeof (RBinJavaElementValuePair)); - if (ev_pair == NULL){ + if (ev_pair == NULL) { // TODO eprintf ev_pair failed to allocate return ev_pair; } // TODO: What is the signifigance of ev_pair element - ev_pair->element_name_idx = R_BIN_JAVA_USHORT(buffer, offset); + ev_pair->element_name_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; ev_pair->file_offset = buf_offset; - ev_pair->name = r_bin_java_get_utf8_from_bin_cp_list(R_BIN_JAVA_GLOBAL_BIN, ev_pair->element_name_idx); - if (ev_pair->name == NULL){ + ev_pair->name = r_bin_java_get_utf8_from_bin_cp_list (R_BIN_JAVA_GLOBAL_BIN, ev_pair->element_name_idx); + if (ev_pair->name == NULL) { // TODO: eprintf unable to find the name for the given index } - ev_pair->value = r_bin_java_element_value_new(buffer+offset, sz-offset, buf_offset+offset); + ev_pair->value = r_bin_java_element_value_new (buffer+offset, sz-offset, buf_offset+offset); offset += ev_pair->value->size; ev_pair->size = offset; return ev_pair; } -R_API void r_bin_java_print_element_pair_summary(RBinJavaElementValuePair *ev_pair){ - if(ev_pair == NULL){ +R_API void r_bin_java_print_element_pair_summary(RBinJavaElementValuePair *ev_pair) { + if(ev_pair == NULL) { eprintf ("Attempting to print an invalid RBinJavaElementValuePair *pair.\n"); return; } - printf("Element Value Pair information:\n"); - printf(" EV Pair File Offset: 0x%08llx\n", ev_pair->file_offset); - printf(" EV Pair Element Name index: 0x%02x\n", ev_pair->element_name_idx); - printf(" EV Pair Element Name: %s\n", ev_pair->name); - printf(" EV Pair Element Value:\n"); - r_bin_java_print_element_value_summary(ev_pair->value); + printf ("Element Value Pair information:\n"); + printf (" EV Pair File Offset: 0x%08llx\n", ev_pair->file_offset); + printf (" EV Pair Element Name index: 0x%02x\n", ev_pair->element_name_idx); + printf (" EV Pair Element Name: %s\n", ev_pair->name); + printf (" EV Pair Element Value:\n"); + r_bin_java_print_element_value_summary (ev_pair->value); } -R_API void r_bin_java_print_element_value_summary(RBinJavaElementValue *element_value){ +R_API void r_bin_java_print_element_value_summary(RBinJavaElementValue *element_value) { RBinJavaCPTypeObj *obj; RBinJavaElementValue *ev_element=NULL; RListIter *iter = NULL, *iter_tmp = NULL; char* name; - if(ev_element == NULL){ + if(ev_element == NULL) { eprintf ("Attempting to print an invalid RBinJavaElementValuePair *pair.\n"); return; } name = ((RBinJavaElementValueMetas *)element_value->metas->type_info)->name; - printf("Element Value information:\n"); - printf(" EV Pair File Offset: 0x%08llx\n", element_value->file_offset); - printf(" EV Value Type (%d): %s\n", element_value->tag, name ); - switch(element_value->tag){ + printf ("Element Value information:\n"); + printf (" EV Pair File Offset: 0x%08llx\n", element_value->file_offset); + printf (" EV Value Type (%d): %s\n", element_value->tag, name ); + switch(element_value->tag) { case R_BIN_JAVA_EV_TAG_BYTE: case R_BIN_JAVA_EV_TAG_CHAR: case R_BIN_JAVA_EV_TAG_DOUBLE: @@ -5101,37 +5138,37 @@ R_API void r_bin_java_print_element_value_summary(RBinJavaElementValue *element_ case R_BIN_JAVA_EV_TAG_SHORT: case R_BIN_JAVA_EV_TAG_BOOLEAN: - printf(" EV Value Constant Value index: 0x%02x\n", element_value->value.const_value.const_value_idx); - printf(" EV Value Constant Value Information:\n"); + printf (" EV Value Constant Value index: 0x%02x\n", element_value->value.const_value.const_value_idx); + printf (" EV Value Constant Value Information:\n"); obj = element_value->value.const_value.const_value_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary (obj); break; case R_BIN_JAVA_EV_TAG_ENUM: - printf(" EV Value Enum Constant Value Const Name Index: 0x%02x\n", element_value->value.enum_const_value.const_name_idx); - printf(" EV Value Enum Constant Value Type Name Index: 0x%02x\n", element_value->value.enum_const_value.type_name_idx); - printf(" EV Value Enum Constant Value Const CP Information:\n"); + printf (" EV Value Enum Constant Value Const Name Index: 0x%02x\n", element_value->value.enum_const_value.const_name_idx); + printf (" EV Value Enum Constant Value Type Name Index: 0x%02x\n", element_value->value.enum_const_value.type_name_idx); + printf (" EV Value Enum Constant Value Const CP Information:\n"); obj = element_value->value.enum_const_value.const_name_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary(obj); - printf(" EV Value Enum Constant Value Type CP Information:\n"); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary (obj); + printf (" EV Value Enum Constant Value Type CP Information:\n"); obj = element_value->value.enum_const_value.type_name_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary (obj); break; case R_BIN_JAVA_EV_TAG_CLASS: - printf(" EV Value Class Info Index: 0x%02x\n", element_value->value.class_value.class_info_idx); - printf(" EV Value Class Info CP Information:\n"); + printf (" EV Value Class Info Index: 0x%02x\n", element_value->value.class_value.class_info_idx); + printf (" EV Value Class Info CP Information:\n"); obj = element_value->value.class_value.class_info_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->print_summary (obj); break; case R_BIN_JAVA_EV_TAG_ARRAY: - printf(" EV Value Array Value Number of Values: 0x%04x\n", element_value->value.array_value.num_values); - printf(" EV Value Array Values\n"); - r_list_foreach_safe(element_value->value.array_value.values, iter, iter_tmp, ev_element){ - r_bin_java_print_element_value_summary(ev_element); + printf (" EV Value Array Value Number of Values: 0x%04x\n", element_value->value.array_value.num_values); + printf (" EV Value Array Values\n"); + r_list_foreach_safe (element_value->value.array_value.values, iter, iter_tmp, ev_element) { + r_bin_java_print_element_value_summary (ev_element); } break; case R_BIN_JAVA_EV_TAG_ANNOTATION: - printf(" EV Annotation Information:\n"); - r_bin_java_print_annotation_summary(&element_value->value.annotation_value); + printf (" EV Annotation Information:\n"); + r_bin_java_print_annotation_summary (&element_value->value.annotation_value); break; default: // eprintf unable to handle tag @@ -5141,29 +5178,29 @@ R_API void r_bin_java_print_element_value_summary(RBinJavaElementValue *element_ -R_API void r_bin_java_element_pair_free(RBinJavaElementValuePair *ev_pair){ +R_API void r_bin_java_element_pair_free (RBinJavaElementValuePair *ev_pair) { - if(ev_pair){ - if (ev_pair->name){ - free(ev_pair->name); + if(ev_pair) { + if (ev_pair->name) { + free (ev_pair->name); ev_pair->name = NULL; } - if(ev_pair->value){ - r_bin_java_element_value_free(ev_pair->value); + if(ev_pair->value) { + r_bin_java_element_value_free (ev_pair->value); ev_pair->value = NULL; } - free(ev_pair); + free (ev_pair); } ev_pair = NULL; } -R_API void r_bin_java_element_value_free(RBinJavaElementValue* element_value){ +R_API void r_bin_java_element_value_free (RBinJavaElementValue* element_value) { RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaCPTypeObj *obj = NULL; RBinJavaElementValuePair *ev_pairs = NULL; RBinJavaElementValue *ev_element = NULL; - if(element_value){ - switch(element_value->tag){ + if(element_value) { + switch(element_value->tag) { case R_BIN_JAVA_EV_TAG_BYTE: case R_BIN_JAVA_EV_TAG_CHAR: case R_BIN_JAVA_EV_TAG_DOUBLE: @@ -5174,97 +5211,97 @@ R_API void r_bin_java_element_value_free(RBinJavaElementValue* element_value){ case R_BIN_JAVA_EV_TAG_BOOLEAN: //Delete the CP Type Object obj = element_value->value.const_value.const_value_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); break; case R_BIN_JAVA_EV_TAG_ENUM: //Delete the CP Type Objects obj = element_value->value.enum_const_value.const_name_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); obj = element_value->value.enum_const_value.type_name_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); break; case R_BIN_JAVA_EV_TAG_CLASS: //Delete the CP Type Object obj = element_value->value.class_value.class_info_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); break; case R_BIN_JAVA_EV_TAG_ARRAY: //Delete the Element Value array List - r_list_foreach_safe(element_value->value.array_value.values, iter, iter_tmp, ev_element){ - if (ev_element){ - r_bin_java_element_value_free(ev_element); + r_list_foreach_safe (element_value->value.array_value.values, iter, iter_tmp, ev_element) { + if (ev_element) { + r_bin_java_element_value_free (ev_element); }else{ // TODO eprintf ev_pairs value was NULL } - r_list_delete(element_value->value.array_value.values, iter); + r_list_delete (element_value->value.array_value.values, iter); ev_element = NULL; } - r_list_free(element_value->value.array_value.values); + r_list_free (element_value->value.array_value.values); break; case R_BIN_JAVA_EV_TAG_ANNOTATION: //Delete the Annotations List - r_list_foreach_safe(element_value->value.annotation_value.element_value_pairs, iter, iter_tmp, ev_pairs){ - if (ev_pairs){ - r_bin_java_element_pair_free(ev_pairs); + r_list_foreach_safe (element_value->value.annotation_value.element_value_pairs, iter, iter_tmp, ev_pairs) { + if (ev_pairs) { + r_bin_java_element_pair_free (ev_pairs); } else{ // TODO eprintf ev_pairs value was NULL } - r_list_delete(element_value->value.annotation_value.element_value_pairs, iter); + r_list_delete (element_value->value.annotation_value.element_value_pairs, iter); ev_pairs = NULL; } - r_list_free(element_value->value.annotation_value.element_value_pairs); + r_list_free (element_value->value.annotation_value.element_value_pairs); break; default: // eprintf unable to free the tag break; } - free(element_value); + free (element_value); } } -R_API ut64 r_bin_java_annotation_default_attr_calc_size(RBinJavaAttrInfo *attr){ +R_API ut64 r_bin_java_annotation_default_attr_calc_size(RBinJavaAttrInfo *attr) { ut64 size = 0; - if (attr){ - //attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + if (attr) { + //attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); size += 6; - //attr->info.annotation_default_attr.default_value = r_bin_java_element_value_new(buffer+offset, sz-offset, buf_offset+offset); + //attr->info.annotation_default_attr.default_value = r_bin_java_element_value_new (buffer+offset, sz-offset, buf_offset+offset); size += r_bin_java_element_value_calc_size(attr->info.annotation_default_attr.default_value); } return size; } -R_API RBinJavaAttrInfo* r_bin_java_annotation_default_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_annotation_default_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut64 offset = 0; RBinJavaAttrInfo* attr = NULL; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if(attr){ + if(attr) { attr->type = R_BIN_JAVA_ATTR_TYPE_ANNOTATION_DEFAULT_ATTR; - attr->info.annotation_default_attr.default_value = r_bin_java_element_value_new(buffer+offset, sz-offset, buf_offset+offset); + attr->info.annotation_default_attr.default_value = r_bin_java_element_value_new (buffer+offset, sz-offset, buf_offset+offset); - if (attr->info.annotation_default_attr.default_value){ + if (attr->info.annotation_default_attr.default_value) { offset += attr->info.annotation_default_attr.default_value->size; } } return attr; } -R_API void r_bin_java_annotation_default_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_annotation_default_attr_free (RBinJavaAttrInfo *attr) { RBinJavaElementValuePair *ev_pairs = NULL; RBinJavaElementValue* element_value = NULL, *ev_element = NULL; RBinJavaCPTypeObj *obj = NULL; RListIter *iter = NULL, *iter_tmp = NULL; - if (attr == NULL || attr->type != R_BIN_JAVA_ATTR_TYPE_ANNOTATION_DEFAULT_ATTR){ + if (attr == NULL || attr->type != R_BIN_JAVA_ATTR_TYPE_ANNOTATION_DEFAULT_ATTR) { return; } element_value = (attr->info.annotation_default_attr.default_value); - switch(element_value->tag){ + switch(element_value->tag) { case R_BIN_JAVA_EV_TAG_BYTE: case R_BIN_JAVA_EV_TAG_CHAR: case R_BIN_JAVA_EV_TAG_DOUBLE: @@ -5275,46 +5312,46 @@ R_API void r_bin_java_annotation_default_attr_free(RBinJavaAttrInfo *attr){ case R_BIN_JAVA_EV_TAG_BOOLEAN: //Delete the CP Type Object obj = element_value->value.const_value.const_value_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); break; case R_BIN_JAVA_EV_TAG_ENUM: //Delete the CP Type Objects obj = element_value->value.enum_const_value.const_name_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); obj = element_value->value.enum_const_value.type_name_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); break; case R_BIN_JAVA_EV_TAG_CLASS: //Delete the CP Type Object obj = element_value->value.class_value.class_info_cp_obj; - ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj(obj); + ((RBinJavaCPTypeMetas *) obj->metas->type_info)->allocs->delete_obj (obj); break; case R_BIN_JAVA_EV_TAG_ARRAY: //Delete the Element Value array List - r_list_foreach_safe(element_value->value.array_value.values, iter, iter_tmp, ev_element){ - if (ev_element){ - r_bin_java_element_value_free(ev_element); + r_list_foreach_safe (element_value->value.array_value.values, iter, iter_tmp, ev_element) { + if (ev_element) { + r_bin_java_element_value_free (ev_element); }else{ // TODO eprintf ev_pairs value was NULL } - r_list_delete(element_value->value.array_value.values, iter); + r_list_delete (element_value->value.array_value.values, iter); ev_element = NULL; } - r_list_free(element_value->value.array_value.values); + r_list_free (element_value->value.array_value.values); break; case R_BIN_JAVA_EV_TAG_ANNOTATION: //Delete the Annotations List - r_list_foreach_safe(element_value->value.annotation_value.element_value_pairs, iter, iter_tmp, ev_pairs){ - if (ev_pairs){ - r_bin_java_element_pair_free(ev_pairs); + r_list_foreach_safe (element_value->value.annotation_value.element_value_pairs, iter, iter_tmp, ev_pairs) { + if (ev_pairs) { + r_bin_java_element_pair_free (ev_pairs); } else{ // TODO eprintf ev_pairs value was NULL } - r_list_delete(element_value->value.annotation_value.element_value_pairs, iter); + r_list_delete (element_value->value.annotation_value.element_value_pairs, iter); ev_pairs = NULL; } - r_list_free(element_value->value.annotation_value.element_value_pairs); + r_list_free (element_value->value.annotation_value.element_value_pairs); break; default: // eprintf unable to free the tag @@ -5324,59 +5361,59 @@ R_API void r_bin_java_annotation_default_attr_free(RBinJavaAttrInfo *attr){ } -R_API RBinJavaAnnotation* r_bin_java_annotation_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAnnotation* r_bin_java_annotation_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0; RBinJavaAnnotation *annotation = NULL; RBinJavaElementValuePair *ev_pairs = NULL; ut64 offset = 0; - annotation = (RBinJavaAnnotation *)malloc(sizeof(RBinJavaAnnotation)); - if (annotation == NULL){ + annotation = (RBinJavaAnnotation *)malloc (sizeof (RBinJavaAnnotation)); + if (annotation == NULL) { // TODO eprintf annotation allocation failed return NULL; } - memset(annotation, 0, sizeof(RBinJavaAnnotation)); + memset (annotation, 0, sizeof (RBinJavaAnnotation)); // (ut16) read and set annotation_value.type_idx; - annotation->type_idx = R_BIN_JAVA_USHORT(buffer, offset); + annotation->type_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; // (ut16) read and set annotation_value.num_element_value_pairs; - annotation->num_element_value_pairs = R_BIN_JAVA_USHORT(buffer, offset); + annotation->num_element_value_pairs = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - annotation->element_value_pairs = r_list_new(); + annotation->element_value_pairs = r_list_new (); // read annotation_value.num_element_value_pairs, and append to annotation_value.element_value_pairs - for (i = 0; i < annotation->num_element_value_pairs; i++){ - ev_pairs = r_bin_java_element_pair_new(buffer+offset, sz-offset, buf_offset+offset); - if(ev_pairs == NULL){ + for (i = 0; i < annotation->num_element_value_pairs; i++) { + ev_pairs = r_bin_java_element_pair_new (buffer+offset, sz-offset, buf_offset+offset); + if(ev_pairs == NULL) { // TODO: eprintf error when reading element pair } - if (ev_pairs){ + if (ev_pairs) { offset += ev_pairs->size; } - r_list_append(annotation->element_value_pairs, (void *) ev_pairs); + r_list_append (annotation->element_value_pairs, (void *) ev_pairs); } annotation->size = offset; return annotation; } -R_API ut64 r_bin_java_annotation_calc_size(RBinJavaAnnotation* annotation){ +R_API ut64 r_bin_java_annotation_calc_size(RBinJavaAnnotation* annotation) { ut64 sz = 0; RListIter *iter, *iter_tmp; RBinJavaElementValuePair *ev_pairs = NULL; - if (annotation == NULL){ + if (annotation == NULL) { // TODO eprintf allocation fail return sz; } - //annotation->type_idx = R_BIN_JAVA_USHORT(buffer, offset); + //annotation->type_idx = R_BIN_JAVA_USHORT (buffer, offset); sz += 2; - //annotation->num_element_value_pairs = R_BIN_JAVA_USHORT(buffer, offset); + //annotation->num_element_value_pairs = R_BIN_JAVA_USHORT (buffer, offset); sz += 2; - r_list_foreach_safe(annotation->element_value_pairs, iter, iter_tmp, ev_pairs){ + r_list_foreach_safe (annotation->element_value_pairs, iter, iter_tmp, ev_pairs) { if (ev_pairs) sz += r_bin_java_element_pair_calc_size(ev_pairs); } @@ -5384,70 +5421,70 @@ R_API ut64 r_bin_java_annotation_calc_size(RBinJavaAnnotation* annotation){ } -R_API void r_bin_java_annotation_free(RBinJavaAnnotation *annotation){ +R_API void r_bin_java_annotation_free (RBinJavaAnnotation *annotation) { RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaElementValuePair *ev_pairs = NULL; - if (annotation){ - if(annotation->element_value_pairs){ - r_list_foreach_safe(annotation->element_value_pairs, iter, iter_tmp, ev_pairs){ - if (ev_pairs){ - r_bin_java_element_pair_free(ev_pairs); + if (annotation) { + if(annotation->element_value_pairs) { + r_list_foreach_safe (annotation->element_value_pairs, iter, iter_tmp, ev_pairs) { + if (ev_pairs) { + r_bin_java_element_pair_free (ev_pairs); } else{ // TODO eprintf ev_pairs value was NULL } - r_list_delete(annotation->element_value_pairs, iter); + r_list_delete (annotation->element_value_pairs, iter); ev_pairs = NULL; } - r_list_free(annotation->element_value_pairs); + r_list_free (annotation->element_value_pairs); } - free(annotation); + free (annotation); } } -R_API void r_bin_java_print_annotation_summary(RBinJavaAnnotation *annotation){ +R_API void r_bin_java_print_annotation_summary(RBinJavaAnnotation *annotation) { RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaElementValuePair *ev_pair = NULL; - if (annotation == NULL){ + if (annotation == NULL) { // TODO eprintf invalid annotation return; } - printf(" Annotation Type Index: 0x%02x\n", annotation->type_idx); - printf(" Annotation Number of EV Pairs: 0x%04x\n", annotation->num_element_value_pairs); - printf(" Annotation EV Pair Values:\n"); - if(annotation->element_value_pairs){ - r_list_foreach_safe(annotation->element_value_pairs, iter, iter_tmp, ev_pair){ - r_bin_java_print_element_pair_summary(ev_pair); + printf (" Annotation Type Index: 0x%02x\n", annotation->type_idx); + printf (" Annotation Number of EV Pairs: 0x%04x\n", annotation->num_element_value_pairs); + printf (" Annotation EV Pair Values:\n"); + if(annotation->element_value_pairs) { + r_list_foreach_safe (annotation->element_value_pairs, iter, iter_tmp, ev_pair) { + r_bin_java_print_element_pair_summary (ev_pair); } } } -R_API ut64 r_bin_java_element_pair_calc_size(RBinJavaElementValuePair *ev_pair){ - ut64 sz = 0; - if (ev_pair == NULL) - return sz; - - //ev_pair->element_name_idx = r_bin_java_read_short(bin, bin->b->cur); - sz += 2; - //ev_pair->value = r_bin_java_element_value_new(bin, offset+2); - if (ev_pair->value) - sz += r_bin_java_element_value_calc_size(ev_pair->value); - - return sz; +R_API ut64 r_bin_java_element_pair_calc_size(RBinJavaElementValuePair *ev_pair) { + ut64 sz = 0; + if (ev_pair == NULL) + return sz; + + //ev_pair->element_name_idx = r_bin_java_read_short(bin, bin->b->cur); + sz += 2; + //ev_pair->value = r_bin_java_element_value_new (bin, offset+2); + if (ev_pair->value) + sz += r_bin_java_element_value_calc_size(ev_pair->value); + + return sz; } -R_API ut64 r_bin_java_element_value_calc_size(RBinJavaElementValue *element_value){ - RListIter *iter, *iter_tmp; - RBinJavaElementValue* ev_element; - RBinJavaElementValuePair *ev_pairs; +R_API ut64 r_bin_java_element_value_calc_size(RBinJavaElementValue *element_value) { + RListIter *iter, *iter_tmp; + RBinJavaElementValue* ev_element; + RBinJavaElementValuePair *ev_pairs; ut64 sz = 0; if (element_value == NULL) return sz; // tag sz += 1; - switch(element_value->tag){ + switch(element_value->tag) { case R_BIN_JAVA_EV_TAG_BYTE: case R_BIN_JAVA_EV_TAG_CHAR: case R_BIN_JAVA_EV_TAG_DOUBLE: @@ -5478,27 +5515,27 @@ R_API ut64 r_bin_java_element_value_calc_size(RBinJavaElementValue *element_valu // (ut16) read and set array_value.num_values //element_value->value.array_value.num_values = r_bin_java_read_short(bin, bin->b->cur); sz += 2; - r_list_foreach_safe(element_value->value.array_value.values, iter, iter_tmp, ev_element){ - if (ev_element){ - sz += r_bin_java_element_value_calc_size(ev_element); - } - } + r_list_foreach_safe (element_value->value.array_value.values, iter, iter_tmp, ev_element) { + if (ev_element) { + sz += r_bin_java_element_value_calc_size(ev_element); + } + } break; case R_BIN_JAVA_EV_TAG_ANNOTATION: // annotation new is not used here. // (ut16) read and set annotation_value.type_idx; //element_value->value.annotation_value.type_idx = r_bin_java_read_short(bin, bin->b->cur); - sz += 2; - // (ut16) read and set annotation_value.num_element_value_pairs; - //element_value->value.annotation_value.num_element_value_pairs = r_bin_java_read_short(bin, bin->b->cur); sz += 2; - element_value->value.annotation_value.element_value_pairs = r_list_new(); - r_list_foreach_safe(element_value->value.annotation_value.element_value_pairs, iter, iter_tmp, ev_pairs ){ - if (ev_pairs){ - sz += r_bin_java_element_pair_calc_size(ev_pairs); - } - } + // (ut16) read and set annotation_value.num_element_value_pairs; + //element_value->value.annotation_value.num_element_value_pairs = r_bin_java_read_short(bin, bin->b->cur); + sz += 2; + element_value->value.annotation_value.element_value_pairs = r_list_new (); + r_list_foreach_safe (element_value->value.annotation_value.element_value_pairs, iter, iter_tmp, ev_pairs ) { + if (ev_pairs) { + sz += r_bin_java_element_pair_calc_size(ev_pairs); + } + } break; default: // eprintf unable to handle tag @@ -5508,26 +5545,26 @@ R_API ut64 r_bin_java_element_value_calc_size(RBinJavaElementValue *element_valu } -R_API RBinJavaElementValue* r_bin_java_element_value_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaElementValue* r_bin_java_element_value_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0; ut64 offset = 0; - RBinJavaElementValue* element_value = (RBinJavaElementValue *) malloc(sizeof(RBinJavaElementValue)); + RBinJavaElementValue* element_value = (RBinJavaElementValue *) malloc (sizeof (RBinJavaElementValue)); RBinJavaElementValuePair* ev_pairs = NULL; // read element_value->tag - if(element_value == NULL){ + if(element_value == NULL) { // eprintf bad allocation return element_value; } - memset(element_value, 0, sizeof(RBinJavaElementValue)); + memset (element_value, 0, sizeof (RBinJavaElementValue)); element_value->file_offset = buf_offset; element_value->tag = buffer[offset]; element_value->size += 1; offset += 1; element_value->metas->type_info = (void *) r_bin_java_get_ev_meta_from_tag( element_value->tag); - switch(element_value->tag){ + switch(element_value->tag) { case R_BIN_JAVA_EV_TAG_BYTE: case R_BIN_JAVA_EV_TAG_CHAR: case R_BIN_JAVA_EV_TAG_DOUBLE: @@ -5538,52 +5575,52 @@ R_API RBinJavaElementValue* r_bin_java_element_value_new(ut8* buffer, ut64 sz, u case R_BIN_JAVA_EV_TAG_BOOLEAN: // look up value in bin->cp_list // (ut16) read and set const_value.const_value_idx - element_value->value.const_value.const_value_idx = R_BIN_JAVA_USHORT(buffer, offset); + element_value->value.const_value.const_value_idx = R_BIN_JAVA_USHORT (buffer, offset); element_value->size += 2; offset += 2; // look-up, deep copy, and set const_value.const_value_cp_obj - element_value->value.const_value.const_value_cp_obj = r_bin_java_clone_cp_idx(R_BIN_JAVA_GLOBAL_BIN, element_value->value.const_value.const_value_idx); + element_value->value.const_value.const_value_cp_obj = r_bin_java_clone_cp_idx (R_BIN_JAVA_GLOBAL_BIN, element_value->value.const_value.const_value_idx); break; case R_BIN_JAVA_EV_TAG_ENUM: // (ut16) read and set enum_const_value.type_name_idx - element_value->value.enum_const_value.type_name_idx = R_BIN_JAVA_USHORT(buffer, offset); + element_value->value.enum_const_value.type_name_idx = R_BIN_JAVA_USHORT (buffer, offset); element_value->size += 2; offset += 2; // (ut16) read and set enum_const_value.const_name_idx - element_value->value.enum_const_value.const_name_idx = R_BIN_JAVA_USHORT(buffer, offset); + element_value->value.enum_const_value.const_name_idx = R_BIN_JAVA_USHORT (buffer, offset); element_value->size += 2; offset += 2; - // look up type_name_index in bin->cp_list + // look up type_name_index in bin->cp_list // look-up, deep copy, and set enum_const_value.const_name_cp_obj - element_value->value.enum_const_value.const_name_cp_obj = r_bin_java_clone_cp_idx(R_BIN_JAVA_GLOBAL_BIN, element_value->value.enum_const_value.const_name_idx); + element_value->value.enum_const_value.const_name_cp_obj = r_bin_java_clone_cp_idx (R_BIN_JAVA_GLOBAL_BIN, element_value->value.enum_const_value.const_name_idx); // look-up, deep copy, and set enum_const_value.type_name_cp_obj - element_value->value.enum_const_value.type_name_cp_obj = r_bin_java_clone_cp_idx(R_BIN_JAVA_GLOBAL_BIN, element_value->value.enum_const_value.type_name_idx); + element_value->value.enum_const_value.type_name_cp_obj = r_bin_java_clone_cp_idx (R_BIN_JAVA_GLOBAL_BIN, element_value->value.enum_const_value.type_name_idx); break; case R_BIN_JAVA_EV_TAG_CLASS: // (ut16) read and set class_value.class_info_idx - element_value->value.class_value.class_info_idx = R_BIN_JAVA_USHORT(buffer, offset); + element_value->value.class_value.class_info_idx = R_BIN_JAVA_USHORT (buffer, offset); element_value->size += 2; offset += 2; - // look up type_name_index in bin->cp_list + // look up type_name_index in bin->cp_list // look-up, deep copy, and set class_value.class_info_cp_obj - element_value->value.class_value.class_info_cp_obj = r_bin_java_clone_cp_idx(R_BIN_JAVA_GLOBAL_BIN, element_value->value.class_value.class_info_idx); + element_value->value.class_value.class_info_cp_obj = r_bin_java_clone_cp_idx (R_BIN_JAVA_GLOBAL_BIN, element_value->value.class_value.class_info_idx); break; case R_BIN_JAVA_EV_TAG_ARRAY: // (ut16) read and set array_value.num_values - element_value->value.array_value.num_values = R_BIN_JAVA_USHORT(buffer, offset); + element_value->value.array_value.num_values = R_BIN_JAVA_USHORT (buffer, offset); element_value->size += 2; offset += 2; - element_value->value.array_value.values = r_list_new(); - for (i = 0; i < element_value->value.array_value.num_values; i++){ - RBinJavaElementValue* ev_element = r_bin_java_element_value_new(buffer+offset, sz-offset, buf_offset+offset); + element_value->value.array_value.values = r_list_new (); + for (i = 0; i < element_value->value.array_value.num_values; i++) { + RBinJavaElementValue* ev_element = r_bin_java_element_value_new (buffer+offset, sz-offset, buf_offset+offset); - if (ev_element){ + if (ev_element) { element_value->size += ev_element->size; offset += ev_element->size; } // read array_value.num_values, and append to array_value.values - r_list_append(element_value->value.array_value.values, (void *) ev_element); - if (ev_element == NULL){ + r_list_append (element_value->value.array_value.values, (void *) ev_element); + if (ev_element == NULL) { // TODO: eprintf error when reading element value } } @@ -5591,26 +5628,26 @@ R_API RBinJavaElementValue* r_bin_java_element_value_new(ut8* buffer, ut64 sz, u case R_BIN_JAVA_EV_TAG_ANNOTATION: // annotation new is not used here. // (ut16) read and set annotation_value.type_idx; - element_value->value.annotation_value.type_idx = R_BIN_JAVA_USHORT(buffer, offset); + element_value->value.annotation_value.type_idx = R_BIN_JAVA_USHORT (buffer, offset); element_value->size += 2; offset += 2; - // (ut16) read and set annotation_value.num_element_value_pairs; - element_value->value.annotation_value.num_element_value_pairs = R_BIN_JAVA_USHORT(buffer, offset); + // (ut16) read and set annotation_value.num_element_value_pairs; + element_value->value.annotation_value.num_element_value_pairs = R_BIN_JAVA_USHORT (buffer, offset); element_value->size += 2; offset += 2; - element_value->value.annotation_value.element_value_pairs = r_list_new(); + element_value->value.annotation_value.element_value_pairs = r_list_new (); // read annotation_value.num_element_value_pairs, and append to annotation_value.element_value_pairs - for (i = 0; i < element_value->value.annotation_value.num_element_value_pairs; i++){ - ev_pairs = r_bin_java_element_pair_new(buffer+offset, sz-offset, buf_offset+offset); - if (ev_pairs){ + for (i = 0; i < element_value->value.annotation_value.num_element_value_pairs; i++) { + ev_pairs = r_bin_java_element_pair_new (buffer+offset, sz-offset, buf_offset+offset); + if (ev_pairs) { element_value->size += ev_pairs->size; offset += ev_pairs->size; - } - if(ev_pairs == NULL){ - // TODO: eprintf error when reading element pair - } - r_list_append(element_value->value.annotation_value.element_value_pairs, (void *) ev_pairs); - } + } + if(ev_pairs == NULL) { + // TODO: eprintf error when reading element pair + } + r_list_append (element_value->value.annotation_value.element_value_pairs, (void *) ev_pairs); + } break; default: // eprintf unable to handle tag @@ -5619,126 +5656,126 @@ R_API RBinJavaElementValue* r_bin_java_element_value_new(ut8* buffer, ut64 sz, u } return element_value; } -R_API void r_bin_java_bootstrap_method_argument_free(RBinJavaBootStrapArgument *bsm_arg){ - if (bsm_arg){ - if (bsm_arg->argument_info_cp_obj){ - ((RBinJavaCPTypeMetas *) bsm_arg->argument_info_cp_obj)->allocs->delete_obj(bsm_arg->argument_info_cp_obj); +R_API void r_bin_java_bootstrap_method_argument_free (RBinJavaBootStrapArgument *bsm_arg) { + if (bsm_arg) { + if (bsm_arg->argument_info_cp_obj) { + ((RBinJavaCPTypeMetas *) bsm_arg->argument_info_cp_obj)->allocs->delete_obj (bsm_arg->argument_info_cp_obj); bsm_arg->argument_info_cp_obj = NULL; } - free(bsm_arg); + free (bsm_arg); } } -R_API void r_bin_java_print_bootstrap_method_argument_summary(RBinJavaBootStrapArgument* bsm_arg){ +R_API void r_bin_java_print_bootstrap_method_argument_summary(RBinJavaBootStrapArgument* bsm_arg) { - if(bsm_arg == NULL){ + if(bsm_arg == NULL) { eprintf ("Attempting to print an invalid RBinJavaBootStrapArgument *.\n"); return; } - printf("Bootstrap Method Argument Information:\n"); - printf(" Offset: 0x%08llx", bsm_arg->file_offset); - printf(" Name_And_Type Index = (0x%02x)\n", bsm_arg->argument_info_idx); - if (bsm_arg->argument_info_cp_obj){ - printf(" Bootstrap Method Argument Type and Name Info:\n"); - ((RBinJavaCPTypeMetas *) bsm_arg->argument_info_cp_obj)->allocs->print_summary(bsm_arg->argument_info_cp_obj); + printf ("Bootstrap Method Argument Information:\n"); + printf (" Offset: 0x%08llx", bsm_arg->file_offset); + printf (" Name_And_Type Index = (0x%02x)\n", bsm_arg->argument_info_idx); + if (bsm_arg->argument_info_cp_obj) { + printf (" Bootstrap Method Argument Type and Name Info:\n"); + ((RBinJavaCPTypeMetas *) bsm_arg->argument_info_cp_obj)->allocs->print_summary (bsm_arg->argument_info_cp_obj); } else - printf(" Bootstrap Method Argument Type and Name Info: INVALID\n"); + printf (" Bootstrap Method Argument Type and Name Info: INVALID\n"); } -R_API void r_bin_java_print_bootstrap_method_summary(RBinJavaBootStrapMethod* bsm){ +R_API void r_bin_java_print_bootstrap_method_summary(RBinJavaBootStrapMethod* bsm) { RBinJavaBootStrapArgument* bsm_arg = NULL; RListIter *iter = NULL, *iter_tmp=NULL; - if(bsm == NULL){ + if(bsm == NULL) { eprintf ("Attempting to print an invalid RBinJavaBootStrapArgument *.\n"); return; } - printf("Bootstrap Method Information:\n"); - printf(" Offset: 0x%08llx", bsm->file_offset); - printf(" Method Reference Index = (0x%02x)\n", bsm->bootstrap_method_ref); - printf(" Number of Method Arguments = (0x%02x)\n", bsm->num_bootstrap_arguments); - if (bsm->bootstrap_arguments){ - r_list_foreach_safe(bsm->bootstrap_arguments, iter, iter_tmp, bsm_arg){ + printf ("Bootstrap Method Information:\n"); + printf (" Offset: 0x%08llx", bsm->file_offset); + printf (" Method Reference Index = (0x%02x)\n", bsm->bootstrap_method_ref); + printf (" Number of Method Arguments = (0x%02x)\n", bsm->num_bootstrap_arguments); + if (bsm->bootstrap_arguments) { + r_list_foreach_safe (bsm->bootstrap_arguments, iter, iter_tmp, bsm_arg) { if(bsm_arg) - r_bin_java_print_bootstrap_method_argument_summary(bsm_arg); + r_bin_java_print_bootstrap_method_argument_summary (bsm_arg); } } else - printf(" Bootstrap Method Argument: NONE \n"); + printf (" Bootstrap Method Argument: NONE \n"); } -R_API RBinJavaBootStrapArgument* r_bin_java_bootstrap_method_argument_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaBootStrapArgument* r_bin_java_bootstrap_method_argument_new (ut8* buffer, ut64 sz, ut64 buf_offset) { RBinJavaBootStrapArgument *bsm_arg = NULL; ut64 offset = 0; - bsm_arg = (RBinJavaBootStrapArgument *) malloc(sizeof(RBinJavaBootStrapArgument)); - if (bsm_arg == NULL){ + bsm_arg = (RBinJavaBootStrapArgument *) malloc (sizeof (RBinJavaBootStrapArgument)); + if (bsm_arg == NULL) { // TODO eprintf failed to allocate bytes for bootstrap_method. return bsm_arg; } - memset(bsm_arg, 0, sizeof(RBinJavaBootStrapArgument)); + memset (bsm_arg, 0, sizeof (RBinJavaBootStrapArgument)); bsm_arg->file_offset = buf_offset; - bsm_arg->argument_info_idx = R_BIN_JAVA_USHORT(buffer, offset); + bsm_arg->argument_info_idx = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - bsm_arg->argument_info_cp_obj = r_bin_java_clone_cp_idx(R_BIN_JAVA_GLOBAL_BIN, bsm_arg->argument_info_idx); + bsm_arg->argument_info_cp_obj = r_bin_java_clone_cp_idx (R_BIN_JAVA_GLOBAL_BIN, bsm_arg->argument_info_idx); bsm_arg->size = offset; return bsm_arg; } -R_API void r_bin_java_bootstrap_method_free(RBinJavaBootStrapMethod *bsm){ +R_API void r_bin_java_bootstrap_method_free (RBinJavaBootStrapMethod *bsm) { RListIter *iter, *iter_tmp; RBinJavaBootStrapArgument *obj = NULL; - if (bsm){ - if (bsm->bootstrap_arguments){ - r_list_foreach_safe(bsm->bootstrap_arguments, iter, iter_tmp, obj){ + if (bsm) { + if (bsm->bootstrap_arguments) { + r_list_foreach_safe (bsm->bootstrap_arguments, iter, iter_tmp, obj) { if(obj) - r_bin_java_bootstrap_method_argument_free(obj); + r_bin_java_bootstrap_method_argument_free (obj); - r_list_delete(bsm->bootstrap_arguments, iter); + r_list_delete (bsm->bootstrap_arguments, iter); } - r_list_free(bsm->bootstrap_arguments); + r_list_free (bsm->bootstrap_arguments); bsm->bootstrap_arguments = NULL; } - free(bsm); + free (bsm); } } -R_API RBinJavaBootStrapMethod* r_bin_java_bootstrap_method_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaBootStrapMethod* r_bin_java_bootstrap_method_new (ut8* buffer, ut64 sz, ut64 buf_offset) { RBinJavaBootStrapMethod *bsm = NULL; RBinJavaBootStrapArgument *bsm_arg = NULL; ut32 i = 0; ut64 offset = 0; - bsm = (RBinJavaBootStrapMethod *) malloc(sizeof(RBinJavaBootStrapMethod)); - if (bsm == NULL){ + bsm = (RBinJavaBootStrapMethod *) malloc (sizeof (RBinJavaBootStrapMethod)); + if (bsm == NULL) { // TODO eprintf failed to allocate bytes for bootstrap_method. return bsm; } - memset(bsm, 0, sizeof(RBinJavaBootStrapMethod)); + memset (bsm, 0, sizeof (RBinJavaBootStrapMethod)); bsm->file_offset = buf_offset; - bsm->bootstrap_method_ref = R_BIN_JAVA_USHORT(buffer, offset); + bsm->bootstrap_method_ref = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - bsm->num_bootstrap_arguments = R_BIN_JAVA_USHORT(buffer, offset); + bsm->num_bootstrap_arguments = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - bsm->bootstrap_arguments = r_list_new(); - for (i = 0; i < bsm->num_bootstrap_arguments; i++){ - //bsm_arg = r_bin_java_bootstrap_method_argument_new(bin, bin->b->cur); - bsm_arg = r_bin_java_bootstrap_method_argument_new(buffer+offset, sz-offset, buf_offset+offset); - if(bsm_arg){ + bsm->bootstrap_arguments = r_list_new (); + for (i = 0; i < bsm->num_bootstrap_arguments; i++) { + //bsm_arg = r_bin_java_bootstrap_method_argument_new (bin, bin->b->cur); + bsm_arg = r_bin_java_bootstrap_method_argument_new (buffer+offset, sz-offset, buf_offset+offset); + if(bsm_arg) { offset += bsm_arg->size; - r_list_append(bsm->bootstrap_arguments, (void *) bsm_arg); + r_list_append (bsm->bootstrap_arguments, (void *) bsm_arg); }else{ // TODO eprintf Failed to read the %d boot strap method. } @@ -5748,61 +5785,61 @@ R_API RBinJavaBootStrapMethod* r_bin_java_bootstrap_method_new(ut8* buffer, ut64 } -R_API void r_bin_java_print_bootstrap_methods_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_bootstrap_methods_attr_summary(RBinJavaAttrInfo *attr) { RListIter *iter, *iter_tmp; RBinJavaBootStrapMethod *obj = NULL; - if (attr == NULL || attr->type == R_BIN_JAVA_ATTR_TYPE_BOOTSTRAP_METHODS_ATTR){ - eprintf("Unable to print attribue summary for RBinJavaAttrInfo *RBinJavaBootstrapMethodsAttr"); + if (attr == NULL || attr->type == R_BIN_JAVA_ATTR_TYPE_BOOTSTRAP_METHODS_ATTR) { + eprintf ("Unable to print attribue summary for RBinJavaAttrInfo *RBinJavaBootstrapMethodsAttr"); return; } - printf("Bootstrap Methods Attribute Information Information:\n"); - printf(" Attribute Offset: 0x%08llx", attr->file_offset); - printf(" Length: 0x%08x", attr->length); - printf(" Number of Method Arguments = (0x%02x)\n", attr->info.bootstrap_methods_attr.num_bootstrap_methods); + printf ("Bootstrap Methods Attribute Information Information:\n"); + printf (" Attribute Offset: 0x%08llx", attr->file_offset); + printf (" Length: 0x%08x", attr->length); + printf (" Number of Method Arguments = (0x%02x)\n", attr->info.bootstrap_methods_attr.num_bootstrap_methods); - if (attr->info.bootstrap_methods_attr.bootstrap_methods){ - r_list_foreach_safe(attr->info.bootstrap_methods_attr.bootstrap_methods, iter, iter_tmp, obj){ + if (attr->info.bootstrap_methods_attr.bootstrap_methods) { + r_list_foreach_safe (attr->info.bootstrap_methods_attr.bootstrap_methods, iter, iter_tmp, obj) { if(obj) - r_bin_java_print_bootstrap_method_summary(obj); + r_bin_java_print_bootstrap_method_summary (obj); } }else{ - printf(" Bootstrap Methods: NONE \n"); + printf (" Bootstrap Methods: NONE \n"); } } -R_API void r_bin_java_bootstrap_methods_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_bootstrap_methods_attr_free (RBinJavaAttrInfo *attr) { RListIter *iter, *iter_tmp; RBinJavaBootStrapMethod *obj = NULL; - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_BOOTSTRAP_METHODS_ATTR){ - if (attr->info.bootstrap_methods_attr.bootstrap_methods){ + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_BOOTSTRAP_METHODS_ATTR) { + if (attr->info.bootstrap_methods_attr.bootstrap_methods) { - r_list_foreach_safe(attr->info.bootstrap_methods_attr.bootstrap_methods, iter, iter_tmp, obj){ + r_list_foreach_safe (attr->info.bootstrap_methods_attr.bootstrap_methods, iter, iter_tmp, obj) { if(obj) - r_bin_java_bootstrap_method_free(obj); + r_bin_java_bootstrap_method_free (obj); - r_list_delete(attr->info.bootstrap_methods_attr.bootstrap_methods, iter); + r_list_delete (attr->info.bootstrap_methods_attr.bootstrap_methods, iter); } - r_list_free(attr->info.bootstrap_methods_attr.bootstrap_methods); + r_list_free (attr->info.bootstrap_methods_attr.bootstrap_methods); attr->info.bootstrap_methods_attr.bootstrap_methods = NULL; } - free(attr); + free (attr); } } -R_API ut64 r_bin_java_bootstrap_methods_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_bootstrap_methods_attr_calc_size(RBinJavaAttrInfo* attr) { RListIter *iter, *iter_tmp; RBinJavaBootStrapMethod *bsm = NULL; ut64 size = 0; - if (attr){ + if (attr) { size += 6; - //attr->info.bootstrap_methods_attr.num_bootstrap_methods = R_BIN_JAVA_USHORT(buffer, offset); + //attr->info.bootstrap_methods_attr.num_bootstrap_methods = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(attr->info.bootstrap_methods_attr.bootstrap_methods, iter, iter_tmp, bsm){ - if(bsm){ + r_list_foreach_safe (attr->info.bootstrap_methods_attr.bootstrap_methods, iter, iter_tmp, bsm) { + if(bsm) { size += r_bin_java_bootstrap_method_calc_size(bsm); }else{ // TODO eprintf Failed to read the %d boot strap method. @@ -5813,29 +5850,29 @@ R_API ut64 r_bin_java_bootstrap_methods_attr_calc_size(RBinJavaAttrInfo* attr){ return size; } -R_API ut64 r_bin_java_bootstrap_arg_calc_size(RBinJavaBootStrapArgument *bsm_arg){ +R_API ut64 r_bin_java_bootstrap_arg_calc_size(RBinJavaBootStrapArgument *bsm_arg) { ut64 size = 0; - if (bsm_arg){ - //bsm_arg->argument_info_idx = R_BIN_JAVA_USHORT(buffer, offset); + if (bsm_arg) { + //bsm_arg->argument_info_idx = R_BIN_JAVA_USHORT (buffer, offset); size += 2; } return size; } -R_API ut64 r_bin_java_bootstrap_method_calc_size(RBinJavaBootStrapMethod *bsm){ +R_API ut64 r_bin_java_bootstrap_method_calc_size(RBinJavaBootStrapMethod *bsm) { RListIter *iter, *iter_tmp; RBinJavaBootStrapArgument *bsm_arg = NULL; ut64 size = 0; - if (bsm){ + if (bsm) { size += 6; - //bsm->bootstrap_method_ref = R_BIN_JAVA_USHORT(buffer, offset); + //bsm->bootstrap_method_ref = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - //bsm->num_bootstrap_arguments = R_BIN_JAVA_USHORT(buffer, offset); + //bsm->num_bootstrap_arguments = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(bsm->bootstrap_arguments, iter, iter_tmp, bsm_arg){ - if(bsm_arg){ + r_list_foreach_safe (bsm->bootstrap_arguments, iter, iter_tmp, bsm_arg) { + if(bsm_arg) { size += r_bin_java_bootstrap_arg_calc_size(bsm_arg); }else{ // TODO eprintf Failed to read the %d boot strap method. @@ -5846,26 +5883,26 @@ R_API ut64 r_bin_java_bootstrap_method_calc_size(RBinJavaBootStrapMethod *bsm){ return size; } -R_API RBinJavaAttrInfo* r_bin_java_bootstrap_methods_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_bootstrap_methods_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0; RBinJavaBootStrapMethod *bsm = NULL; ut64 offset = 0; - RBinJavaAttrInfo *attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + RBinJavaAttrInfo *attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if(attr){ + if(attr) { attr->type = R_BIN_JAVA_ATTR_TYPE_BOOTSTRAP_METHODS_ATTR; - attr->info.bootstrap_methods_attr.num_bootstrap_methods = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.bootstrap_methods_attr.num_bootstrap_methods = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.bootstrap_methods_attr.bootstrap_methods = r_list_new(); - for (i = 0; i < attr->info.bootstrap_methods_attr.num_bootstrap_methods; i++){ - //bsm = r_bin_java_bootstrap_method_new(bin, bin->b->cur); - bsm = r_bin_java_bootstrap_method_new(buffer+offset, sz-offset, buf_offset+offset); - if(bsm){ + attr->info.bootstrap_methods_attr.bootstrap_methods = r_list_new (); + for (i = 0; i < attr->info.bootstrap_methods_attr.num_bootstrap_methods; i++) { + //bsm = r_bin_java_bootstrap_method_new (bin, bin->b->cur); + bsm = r_bin_java_bootstrap_method_new (buffer+offset, sz-offset, buf_offset+offset); + if(bsm) { offset += bsm->size; - r_list_append(attr->info.bootstrap_methods_attr.bootstrap_methods, (void *) bsm); + r_list_append (attr->info.bootstrap_methods_attr.bootstrap_methods, (void *) bsm); }else{ // TODO eprintf Failed to read the %d boot strap method. } @@ -5876,135 +5913,135 @@ R_API RBinJavaAttrInfo* r_bin_java_bootstrap_methods_attr_new(ut8* buffer, ut64 } -R_API void r_bin_java_print_annotation_default_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_annotation_default_attr_summary(RBinJavaAttrInfo *attr) { - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_ANNOTATION_DEFAULT_ATTR){ - printf("Annotation Default Attribute Information:\n"); + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_ANNOTATION_DEFAULT_ATTR) { + printf ("Annotation Default Attribute Information:\n"); printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); - r_bin_java_print_element_value_summary((attr->info.annotation_default_attr.default_value)); + r_bin_java_print_element_value_summary ((attr->info.annotation_default_attr.default_value)); }else{ // TODO: eprintf attr is invalid } } -R_API void r_bin_java_annotation_array_free(RBinJavaAnnotationsArray *annotation_array){ +R_API void r_bin_java_annotation_array_free (RBinJavaAnnotationsArray *annotation_array) { RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaAnnotation *annotation; - if (annotation_array->annotations == NULL){ + if (annotation_array->annotations == NULL) { // TODO eprintf return; } - r_list_foreach_safe(annotation_array->annotations, iter, iter_tmp, annotation){ + r_list_foreach_safe (annotation_array->annotations, iter, iter_tmp, annotation) { if (annotation) - r_bin_java_annotation_free(annotation); - r_list_delete(annotation_array->annotations, iter); + r_bin_java_annotation_free (annotation); + r_list_delete (annotation_array->annotations, iter); } - r_list_free(annotation_array->annotations); - free(annotation_array); + r_list_free (annotation_array->annotations); + free (annotation_array); } -R_API void r_bin_java_print_annotation_array_summary(RBinJavaAnnotationsArray *annotation_array){ +R_API void r_bin_java_print_annotation_array_summary(RBinJavaAnnotationsArray *annotation_array) { RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaAnnotation *annotation; - if (annotation_array->annotations == NULL){ + if (annotation_array->annotations == NULL) { // TODO eprintf return; } printf (" Annotation Array Information:\n"); printf (" Number of Annotation Array Elements: %d\n", annotation_array->num_annotations); - r_list_foreach_safe(annotation_array->annotations, iter, iter_tmp, annotation){ - r_bin_java_print_annotation_summary(annotation); + r_list_foreach_safe (annotation_array->annotations, iter, iter_tmp, annotation) { + r_bin_java_print_annotation_summary (annotation); } } -R_API RBinJavaAnnotationsArray* r_bin_java_annotation_array_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAnnotationsArray* r_bin_java_annotation_array_new (ut8* buffer, ut64 sz, ut64 buf_offset) { RBinJavaAnnotation *annotation; RBinJavaAnnotationsArray *annotation_array; ut32 i; ut64 offset = 0; - annotation_array = (RBinJavaAnnotationsArray *) malloc(sizeof(RBinJavaAnnotationsArray)); - if (annotation_array == NULL){ + annotation_array = (RBinJavaAnnotationsArray *) malloc (sizeof (RBinJavaAnnotationsArray)); + if (annotation_array == NULL) { // TODO eprintf return NULL; } - annotation_array->num_annotations = R_BIN_JAVA_USHORT(buffer, offset); + annotation_array->num_annotations = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - annotation_array->annotations = r_list_new(); - for (i=0; i < annotation_array->num_annotations; i++){ - annotation = r_bin_java_annotation_new(buffer+offset, sz-offset, buf_offset+offset); - if (annotation){ + annotation_array->annotations = r_list_new (); + for (i=0; i < annotation_array->num_annotations; i++) { + annotation = r_bin_java_annotation_new (buffer+offset, sz-offset, buf_offset+offset); + if (annotation) { offset += annotation->size; } - if (annotation == NULL){ + if (annotation == NULL) { // TODO eprintf } - r_list_append(annotation_array->annotations, (void *) annotation); + r_list_append (annotation_array->annotations, (void *) annotation); } annotation_array->size = offset; return annotation_array; } -R_API RBinJavaAttrInfo* r_bin_java_rtv_annotations_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_rtv_annotations_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0; RBinJavaAttrInfo *attr = NULL; ut64 offset = 0; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if(attr){ + if(attr) { attr->type = R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_ANNOTATION_ATTR; - attr->info.annotation_array.num_annotations = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.annotation_array.num_annotations = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.annotation_array.annotations = r_list_new(); - for (i=0; i < attr->info.annotation_array.num_annotations; i++){ - RBinJavaAnnotation* annotation = r_bin_java_annotation_new(buffer+offset, sz-offset, buf_offset+offset); - if (annotation == NULL){ + attr->info.annotation_array.annotations = r_list_new (); + for (i=0; i < attr->info.annotation_array.num_annotations; i++) { + RBinJavaAnnotation* annotation = r_bin_java_annotation_new (buffer+offset, sz-offset, buf_offset+offset); + if (annotation == NULL) { } - if (annotation){ + if (annotation) { offset += annotation->size; } - r_list_append(attr->info.annotation_array.annotations, (void *) annotation); + r_list_append (attr->info.annotation_array.annotations, (void *) annotation); } attr->size = offset; } return attr; } -R_API ut64 r_bin_java_annotation_array_calc_size(RBinJavaAnnotationsArray* annotation_array){ +R_API ut64 r_bin_java_annotation_array_calc_size(RBinJavaAnnotationsArray* annotation_array) { ut64 size = 0; RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaAnnotation *annotation; - if (annotation_array->annotations == NULL){ + if (annotation_array->annotations == NULL) { // TODO eprintf return size; } - //annotation_array->num_annotations = R_BIN_JAVA_USHORT(buffer, offset); + //annotation_array->num_annotations = R_BIN_JAVA_USHORT (buffer, offset); size += 2; - r_list_foreach_safe(annotation_array->annotations, iter, iter_tmp, annotation){ + r_list_foreach_safe (annotation_array->annotations, iter, iter_tmp, annotation) { size += r_bin_java_annotation_calc_size(annotation); } return size; } -R_API ut64 r_bin_java_rtv_annotations_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_rtv_annotations_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf allocation fail return size; } @@ -6013,37 +6050,37 @@ R_API ut64 r_bin_java_rtv_annotations_attr_calc_size(RBinJavaAttrInfo* attr){ } -R_API RBinJavaAttrInfo* r_bin_java_rti_annotations_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_rti_annotations_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0; RBinJavaAttrInfo *attr = NULL; ut64 offset = 0; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; - if(attr){ + if(attr) { attr->type = R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_ANNOTATION_ATTR; - attr->info.annotation_array.num_annotations = R_BIN_JAVA_USHORT(buffer, offset); + attr->info.annotation_array.num_annotations = R_BIN_JAVA_USHORT (buffer, offset); offset += 2; - attr->info.annotation_array.annotations = r_list_new(); - for (i=0; i < attr->info.rtv_annotations_attr.num_annotations; i++){ - RBinJavaAnnotation* annotation = r_bin_java_annotation_new(buffer+offset, sz-offset, buf_offset+offset); - if (annotation == NULL){ + attr->info.annotation_array.annotations = r_list_new (); + for (i=0; i < attr->info.rtv_annotations_attr.num_annotations; i++) { + RBinJavaAnnotation* annotation = r_bin_java_annotation_new (buffer+offset, sz-offset, buf_offset+offset); + if (annotation == NULL) { } if (annotation) offset += annotation->size; - r_list_append(attr->info.annotation_array.annotations, (void *) annotation); + r_list_append (attr->info.annotation_array.annotations, (void *) annotation); } attr->size = offset; } return attr; } -R_API ut64 r_bin_java_rti_annotations_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_rti_annotations_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf allocation fail return size; } @@ -6052,102 +6089,102 @@ R_API ut64 r_bin_java_rti_annotations_attr_calc_size(RBinJavaAttrInfo* attr){ } -R_API void r_bin_java_rtv_annotations_attr_free(RBinJavaAttrInfo *attr){ - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_ANNOTATION_ATTR){ +R_API void r_bin_java_rtv_annotations_attr_free (RBinJavaAttrInfo *attr) { + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_ANNOTATION_ATTR) { RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaAnnotation *annotation; - if (attr->info.annotation_array.annotations){ + if (attr->info.annotation_array.annotations) { - r_list_foreach_safe(attr->info.annotation_array.annotations, iter, iter_tmp, annotation){ + r_list_foreach_safe (attr->info.annotation_array.annotations, iter, iter_tmp, annotation) { if (annotation) - r_bin_java_annotation_free(annotation); - r_list_delete(attr->info.annotation_array.annotations, iter); + r_bin_java_annotation_free (annotation); + r_list_delete (attr->info.annotation_array.annotations, iter); } - r_list_free(attr->info.annotation_array.annotations); + r_list_free (attr->info.annotation_array.annotations); } - free(attr); + free (attr); } } -R_API void r_bin_java_rti_annotations_attr_free(RBinJavaAttrInfo *attr){ - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_ANNOTATION_ATTR){ +R_API void r_bin_java_rti_annotations_attr_free (RBinJavaAttrInfo *attr) { + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_ANNOTATION_ATTR) { RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaAnnotation *annotation; - if (attr->info.annotation_array.annotations){ + if (attr->info.annotation_array.annotations) { - r_list_foreach_safe(attr->info.annotation_array.annotations, iter, iter_tmp, annotation){ + r_list_foreach_safe (attr->info.annotation_array.annotations, iter, iter_tmp, annotation) { if (annotation) - r_bin_java_annotation_free(annotation); - r_list_delete(attr->info.annotation_array.annotations, iter); + r_bin_java_annotation_free (annotation); + r_list_delete (attr->info.annotation_array.annotations, iter); } - r_list_free(attr->info.annotation_array.annotations); + r_list_free (attr->info.annotation_array.annotations); } - free(attr); + free (attr); } } -R_API void r_bin_java_print_rtv_annotations_attr_summary(RBinJavaAttrInfo *attr){ - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_ANNOTATION_ATTR){ - printf("Runtime Visible Annotations Attribute Information:\n"); +R_API void r_bin_java_print_rtv_annotations_attr_summary(RBinJavaAttrInfo *attr) { + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_ANNOTATION_ATTR) { + printf ("Runtime Visible Annotations Attribute Information:\n"); printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); - r_bin_java_print_annotation_array_summary(&attr->info.annotation_array); + r_bin_java_print_annotation_array_summary (&attr->info.annotation_array); } } -R_API void r_bin_java_print_rti_annotations_attr_summary(RBinJavaAttrInfo *attr){ - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_ANNOTATION_ATTR){ - printf("Runtime Invisible Annotations Attribute Information:\n"); +R_API void r_bin_java_print_rti_annotations_attr_summary(RBinJavaAttrInfo *attr) { + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_ANNOTATION_ATTR) { + printf ("Runtime Invisible Annotations Attribute Information:\n"); printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); - r_bin_java_print_annotation_array_summary(&attr->info.annotation_array); + r_bin_java_print_annotation_array_summary (&attr->info.annotation_array); } } -R_API ut64 r_bin_java_rtip_annotations_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_rtip_annotations_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaAnnotationsArray *annotation_array; - if (attr == NULL){ + if (attr == NULL) { // TODO eprintf allocation fail return size; } //attr->info.rtip_annotations_attr.num_parameters = buffer[offset]; size += (6 + 1); - r_list_foreach_safe(attr->info.rtip_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array){ + r_list_foreach_safe (attr->info.rtip_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array) { if(annotation_array) size += r_bin_java_annotation_array_calc_size(annotation_array); } return size; } -R_API RBinJavaAttrInfo* r_bin_java_rtip_annotations_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_rtip_annotations_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0; RBinJavaAttrInfo *attr = NULL; ut64 offset = 0; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; RBinJavaAnnotationsArray *annotation_array; - if(attr){ + if(attr) { attr->type = R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_PARAMETER_ANNOTATION_ATTR; attr->info.rtip_annotations_attr.num_parameters = buffer[offset]; offset += 1; - attr->info.rtip_annotations_attr.parameter_annotations = r_list_new(); - for (i=0; i < attr->info.rtip_annotations_attr.num_parameters; i++){ - annotation_array = r_bin_java_annotation_array_new(buffer+offset, sz-offset, buf_offset+offset); - if (annotation_array == NULL){ + attr->info.rtip_annotations_attr.parameter_annotations = r_list_new (); + for (i=0; i < attr->info.rtip_annotations_attr.num_parameters; i++) { + annotation_array = r_bin_java_annotation_array_new (buffer+offset, sz-offset, buf_offset+offset); + if (annotation_array == NULL) { } if (annotation_array) offset += annotation_array->size; - r_list_append(attr->info.rtip_annotations_attr.parameter_annotations, (void *) annotation_array); + r_list_append (attr->info.rtip_annotations_attr.parameter_annotations, (void *) annotation_array); } attr->size = offset; } @@ -6156,40 +6193,40 @@ R_API RBinJavaAttrInfo* r_bin_java_rtip_annotations_attr_new(ut8* buffer, ut64 s -R_API RBinJavaAttrInfo* r_bin_java_rtvp_annotations_attr_new(ut8* buffer, ut64 sz, ut64 buf_offset){ +R_API RBinJavaAttrInfo* r_bin_java_rtvp_annotations_attr_new (ut8* buffer, ut64 sz, ut64 buf_offset) { ut32 i = 0; RBinJavaAttrInfo *attr = NULL; ut64 offset = 0; - attr = r_bin_java_default_attr_new(buffer, sz, buf_offset); + attr = r_bin_java_default_attr_new (buffer, sz, buf_offset); offset += 6; RBinJavaAnnotationsArray *annotation_array; - if(attr){ + if(attr) { attr->type = R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_PARAMETER_ANNOTATION_ATTR; attr->info.rtvp_annotations_attr.num_parameters = buffer[offset]; offset += 1; - attr->info.rtvp_annotations_attr.parameter_annotations = r_list_new(); + attr->info.rtvp_annotations_attr.parameter_annotations = r_list_new (); - for (i=0; i < attr->info.rtvp_annotations_attr.num_parameters; i++){ - annotation_array = r_bin_java_annotation_array_new(buffer+offset, sz-offset, buf_offset+offset); - if (annotation_array == NULL){ + for (i=0; i < attr->info.rtvp_annotations_attr.num_parameters; i++) { + annotation_array = r_bin_java_annotation_array_new (buffer+offset, sz-offset, buf_offset+offset); + if (annotation_array == NULL) { } if (annotation_array) offset += annotation_array->size; - r_list_append(attr->info.rtvp_annotations_attr.parameter_annotations, (void *) annotation_array); + r_list_append (attr->info.rtvp_annotations_attr.parameter_annotations, (void *) annotation_array); } attr->size = offset; } return attr; } -R_API ut64 r_bin_java_rtvp_annotations_attr_calc_size(RBinJavaAttrInfo* attr){ +R_API ut64 r_bin_java_rtvp_annotations_attr_calc_size(RBinJavaAttrInfo* attr) { ut64 size = 0; RListIter *iter = NULL, *iter_tmp = NULL; RBinJavaAnnotationsArray *annotation_array; @@ -6205,75 +6242,75 @@ R_API ut64 r_bin_java_rtvp_annotations_attr_calc_size(RBinJavaAttrInfo* attr){ } -R_API void r_bin_java_rtvp_annotations_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_rtvp_annotations_attr_free (RBinJavaAttrInfo *attr) { RBinJavaAnnotationsArray *annotation_array = NULL; RListIter *iter = NULL, *iter_tmp = NULL; - if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_PARAMETER_ANNOTATION_ATTR){ - if (attr->info.rtvp_annotations_attr.parameter_annotations){ - r_list_foreach_safe(attr->info.rtvp_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array){ + if (attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_PARAMETER_ANNOTATION_ATTR) { + if (attr->info.rtvp_annotations_attr.parameter_annotations) { + r_list_foreach_safe (attr->info.rtvp_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array) { if (annotation_array) - r_bin_java_annotation_array_free(annotation_array); + r_bin_java_annotation_array_free (annotation_array); - r_list_delete(attr->info.rtvp_annotations_attr.parameter_annotations, iter); + r_list_delete (attr->info.rtvp_annotations_attr.parameter_annotations, iter); } - r_list_free(attr->info.rtvp_annotations_attr.parameter_annotations); + r_list_free (attr->info.rtvp_annotations_attr.parameter_annotations); } } } -R_API void r_bin_java_rtip_annotations_attr_free(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_rtip_annotations_attr_free (RBinJavaAttrInfo *attr) { RBinJavaAnnotationsArray *annotation_array = NULL; RListIter *iter = NULL, *iter_tmp = NULL; - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_PARAMETER_ANNOTATION_ATTR){ - if (attr->info.rtip_annotations_attr.parameter_annotations){ - r_list_foreach_safe(attr->info.rtip_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array){ + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_PARAMETER_ANNOTATION_ATTR) { + if (attr->info.rtip_annotations_attr.parameter_annotations) { + r_list_foreach_safe (attr->info.rtip_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array) { if (annotation_array) - r_bin_java_annotation_array_free(annotation_array); + r_bin_java_annotation_array_free (annotation_array); - r_list_delete(attr->info.rtip_annotations_attr.parameter_annotations, iter); + r_list_delete (attr->info.rtip_annotations_attr.parameter_annotations, iter); } - r_list_free(attr->info.rtip_annotations_attr.parameter_annotations); + r_list_free (attr->info.rtip_annotations_attr.parameter_annotations); } } } -R_API void r_bin_java_print_rtvp_annotations_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_rtvp_annotations_attr_summary(RBinJavaAttrInfo *attr) { RBinJavaAnnotationsArray *annotation_array = NULL; RListIter *iter = NULL, *iter_tmp = NULL; - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_PARAMETER_ANNOTATION_ATTR){ - printf("Runtime Visible Parameter Annotations Attribute Information:\n"); + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_VISIBLE_PARAMETER_ANNOTATION_ATTR) { + printf ("Runtime Visible Parameter Annotations Attribute Information:\n"); printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); printf (" Number of Runtime Invisible Parameters: %d\n", attr->info.rtvp_annotations_attr.num_parameters); - r_list_foreach_safe(attr->info.rtvp_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array){ - r_bin_java_print_annotation_array_summary(annotation_array); + r_list_foreach_safe (attr->info.rtvp_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array) { + r_bin_java_print_annotation_array_summary (annotation_array); } } } -R_API void r_bin_java_print_rtip_annotations_attr_summary(RBinJavaAttrInfo *attr){ +R_API void r_bin_java_print_rtip_annotations_attr_summary(RBinJavaAttrInfo *attr) { RBinJavaAnnotationsArray *annotation_array = NULL; RListIter *iter = NULL, *iter_tmp = NULL; - if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_PARAMETER_ANNOTATION_ATTR){ - printf("Runtime Invisible Parameter Annotations Attribute Information:\n"); + if(attr && attr->type == R_BIN_JAVA_ATTR_TYPE_RUNTIME_INVISIBLE_PARAMETER_ANNOTATION_ATTR) { + printf ("Runtime Invisible Parameter Annotations Attribute Information:\n"); printf (" Attribute Offset: 0x%08llx\n", attr->file_offset); printf (" Attribute Name Index: %d (%s)\n", attr->name_idx, attr->name); printf (" Attribute length: %d\n", attr->length); printf (" Number of Runtime Invisible Parameters: %d\n", attr->info.rtip_annotations_attr.num_parameters); - r_list_foreach_safe(attr->info.rtip_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array){ - r_bin_java_print_annotation_array_summary(annotation_array); + r_list_foreach_safe (attr->info.rtip_annotations_attr.parameter_annotations, iter, iter_tmp, annotation_array) { + r_bin_java_print_annotation_array_summary (annotation_array); } } } -R_API RBinJavaCPTypeObj *r_bin_java_find_cp_name_and_type_info(ut16 name_idx, ut16 descriptor_idx){ +R_API RBinJavaCPTypeObj *r_bin_java_find_cp_name_and_type_info(ut16 name_idx, ut16 descriptor_idx) { RListIter *iter, *iter_tmp; RBinJavaCPTypeObj *result= NULL, *obj = NULL; - IFDBG eprintf("Looking for name_idx: %d and descriptor_idx: %d\n", name_idx, descriptor_idx); - r_list_foreach_safe(R_BIN_JAVA_GLOBAL_BIN->cp_list, iter, iter_tmp, obj){ - if(obj && obj->tag == R_BIN_JAVA_CP_NAMEANDTYPE){ - IFDBG eprintf("RBinJavaCPTypeNameAndType has name_idx: %d and descriptor_idx: %d\n", obj->info.cp_name_and_type.name_idx, obj->info.cp_name_and_type.descriptor_idx); + IFDBG eprintf ("Looking for name_idx: %d and descriptor_idx: %d\n", name_idx, descriptor_idx); + r_list_foreach_safe (R_BIN_JAVA_GLOBAL_BIN->cp_list, iter, iter_tmp, obj) { + if(obj && obj->tag == R_BIN_JAVA_CP_NAMEANDTYPE) { + IFDBG eprintf ("RBinJavaCPTypeNameAndType has name_idx: %d and descriptor_idx: %d\n", obj->info.cp_name_and_type.name_idx, obj->info.cp_name_and_type.descriptor_idx); if (obj->info.cp_name_and_type.name_idx == name_idx && - obj->info.cp_name_and_type.descriptor_idx == descriptor_idx){ + obj->info.cp_name_and_type.descriptor_idx == descriptor_idx) { result = obj; break; } @@ -6283,29 +6320,29 @@ R_API RBinJavaCPTypeObj *r_bin_java_find_cp_name_and_type_info(ut16 name_idx, ut return result; } -R_API RBinJavaCPTypeObj *r_bin_java_find_cp_ref_info_from_name_and_type(ut16 name_idx, ut16 descriptor_idx){ +R_API RBinJavaCPTypeObj *r_bin_java_find_cp_ref_info_from_name_and_type (ut16 name_idx, ut16 descriptor_idx) { RBinJavaCPTypeObj *result= NULL, - *obj = r_bin_java_find_cp_name_and_type_info(name_idx, descriptor_idx); + *obj = r_bin_java_find_cp_name_and_type_info (name_idx, descriptor_idx); if(obj) - result = r_bin_java_find_cp_ref_info(obj->metas->ord); + result = r_bin_java_find_cp_ref_info (obj->metas->ord); return result; } -R_API RBinJavaCPTypeObj *r_bin_java_find_cp_ref_info(ut16 name_and_type_idx){ +R_API RBinJavaCPTypeObj *r_bin_java_find_cp_ref_info(ut16 name_and_type_idx) { RListIter *iter, *iter_tmp; RBinJavaCPTypeObj *result= NULL, *obj = NULL; - r_list_foreach_safe(R_BIN_JAVA_GLOBAL_BIN->cp_list, iter, iter_tmp, obj){ - if(obj == NULL){ + r_list_foreach_safe (R_BIN_JAVA_GLOBAL_BIN->cp_list, iter, iter_tmp, obj) { + if(obj == NULL) { continue; } else if (obj->tag == R_BIN_JAVA_CP_FIELDREF && - obj->info.cp_field.name_and_type_idx == name_and_type_idx){ + obj->info.cp_field.name_and_type_idx == name_and_type_idx) { result = obj; break; } else if (obj->tag == R_BIN_JAVA_CP_METHODREF && - obj->info.cp_method.name_and_type_idx == name_and_type_idx){ + obj->info.cp_method.name_and_type_idx == name_and_type_idx) { result = obj; break; } diff --git a/shlr/java/class.h b/shlr/java/class.h index 461c136e5e..dbdca19558 100644 --- a/shlr/java/class.h +++ b/shlr/java/class.h @@ -660,9 +660,9 @@ typedef struct r_bin_java_attr_classes_t { ut64 file_offset; RBinJavaAttrInfo *clint_attr; RBinJavaField *clint_field; - ut16 inner_class_info_idx; - ut16 outer_class_info_idx; - ut16 inner_name_idx; + ut16 inner_class_info_idx; + ut16 outer_class_info_idx; + ut16 inner_name_idx; ut16 inner_class_access_flags; ut64 size; } RBinJavaClassesAttribute; @@ -744,7 +744,7 @@ typedef struct r_bin_java_obj_t { R_API RList* r_bin_java_get_sections(RBinJavaObj *bin); R_API RList* r_bin_java_get_fields(RBinJavaObj *bin); R_API char* r_bin_java_get_version(RBinJavaObj* bin); -R_API ut64 r_bin_java_get_entrypoint(RBinJavaObj* bin); +R_API RBinAddr * r_bin_java_get_entrypoint(RBinJavaObj* bin, int sym); R_API RList* r_bin_java_get_entrypoints(RBinJavaObj* bin); R_API ut64 r_bin_java_get_main(RBinJavaObj* bin); R_API RList* r_bin_java_get_symbols(RBinJavaObj* bin); @@ -1123,7 +1123,7 @@ R_API RBinClass* r_bin_java_allocate_r_bin_class(); R_API RList *r_bin_java_get_classes(RBinJavaObj *bin); R_API RList *r_bin_java_enum_class_methods(RBinJavaObj *bin, ut16 class_idx); R_API RList *r_bin_java_enum_class_fields(RBinJavaObj *bin, ut16 class_idx); - +R_API ut64 r_bin_java_find_method_offset(RBinJavaObj *bin, char* method_name); R_API void debug_dump_all_cp_obj(); diff --git a/shlr/java/code.c b/shlr/java/code.c index f9b31403b5..26a742c708 100644 --- a/shlr/java/code.c +++ b/shlr/java/code.c @@ -10,7 +10,9 @@ #include "code.h" #include "class.h" -#define V if(verbose) +#define V if (verbose) + + static RBinJavaObj *BIN_OBJ = NULL; @@ -19,256 +21,299 @@ R_API void r_java_set_obj(RBinJavaObj *obj) { BIN_OBJ = obj; } -static char * java_resolve(int idx) { +static char * java_resolve_with_space(int idx) { + return java_resolve(idx, 1); +} + +static char * java_resolve_without_space(int idx) { + return java_resolve(idx, 0); +} + +static char * java_resolve(int idx, ut8 space_bn_name_type) { // TODO XXX FIXME add a size parameter to the str when it is passed in RBinJavaCPTypeObj *item = NULL, *item2 = NULL; char *class_str = NULL, - *name_str = NULL, - *desc_str = NULL, - *string_str = NULL, - *empty = "", - *cp_name = NULL, - *cp_name2 = NULL, - *str = NULL; + *name_str = NULL, + *desc_str = NULL, + *string_str = NULL, + *empty = "", + *cp_name = NULL, + *cp_name2 = NULL, + *str = NULL; - int memory_alloc = 0; + int memory_alloc = 0; if (BIN_OBJ && BIN_OBJ->cp_count < 1 ) { //javasm_init(BIN_OBJ); return NULL; } - - item = (RBinJavaCPTypeObj *) r_bin_java_get_item_from_bin_cp_list(BIN_OBJ, idx); - + + item = (RBinJavaCPTypeObj *) r_bin_java_get_item_from_bin_cp_list (BIN_OBJ, idx); + cp_name = ((RBinJavaCPTypeMetas *) item->metas->type_info)->name; - - if (!item){ - str = malloc(512); + + if (!item) { + str = malloc (512); if (str) snprintf (str,512, "(%d) INVALID CP_OBJ", idx); - + return str; } cp_name = ((RBinJavaCPTypeMetas *) item->metas->type_info)->name; - if ( strcmp (cp_name, "Class") == 0 ){ - item2 = (RBinJavaCPTypeObj *) r_bin_java_get_item_from_bin_cp_list(BIN_OBJ, idx); - - //str = r_bin_java_get_name_from_bin_cp_list(BIN_OBJ, idx-1); + if ( strcmp (cp_name, "Class") == 0 ) { + item2 = (RBinJavaCPTypeObj *) r_bin_java_get_item_from_bin_cp_list (BIN_OBJ, idx); + + //str = r_bin_java_get_name_from_bin_cp_list (BIN_OBJ, idx-1); class_str = empty; - class_str = r_bin_java_get_item_name_from_bin_cp_list(BIN_OBJ, item); - + class_str = r_bin_java_get_item_name_from_bin_cp_list (BIN_OBJ, item); + if (!class_str) class_str = empty; - name_str = r_bin_java_get_item_name_from_bin_cp_list(BIN_OBJ, item2); + name_str = r_bin_java_get_item_name_from_bin_cp_list (BIN_OBJ, item2); if (!name_str) name_str = empty; - desc_str = r_bin_java_get_item_desc_from_bin_cp_list(BIN_OBJ, item2); + desc_str = r_bin_java_get_item_desc_from_bin_cp_list (BIN_OBJ, item2); if (!desc_str) desc_str = empty; - memory_alloc = strlen(class_str) + strlen(name_str) + strlen(desc_str) + 3; - + memory_alloc = strlen (class_str) + strlen (name_str) + strlen (desc_str) + 3; + if (memory_alloc) - str = malloc(memory_alloc); - - if (str) + str = malloc (memory_alloc); + + if (str && !space_bn_name_type) snprintf (str, memory_alloc, "%s%s", name_str, desc_str); + else if (str && space_bn_name_type) + snprintf (str, memory_alloc, "%s %s", name_str, desc_str); + + + if (class_str != empty) + free (class_str); + + if (name_str != empty) + free (name_str); + if (desc_str != empty) + free (desc_str); + + }else if ( strcmp (cp_name, "MethodRef") == 0 || + strcmp (cp_name, "FieldRef") == 0 || + strcmp (cp_name, "InterfaceMethodRef") == 0) { + + /* + * The MethodRef, FieldRef, and InterfaceMethodRef structures + */ + + class_str = r_bin_java_get_name_from_bin_cp_list (BIN_OBJ, item->info.cp_method.class_idx); + if (!class_str) + class_str = empty; + + name_str = r_bin_java_get_item_name_from_bin_cp_list (BIN_OBJ, item); + if (!name_str) + name_str = empty; + + desc_str = r_bin_java_get_item_desc_from_bin_cp_list (BIN_OBJ, item); + if (!desc_str) + desc_str = empty; + + memory_alloc = strlen (class_str) + strlen (name_str) + strlen (desc_str) + 3; + + if (memory_alloc) + str = malloc (memory_alloc); + + if (str && !space_bn_name_type) + snprintf (str, memory_alloc, "%s/%s%s", class_str, name_str, desc_str); + else if (str && space_bn_name_type) + snprintf (str, memory_alloc, "%s/%s %s", class_str, name_str, desc_str); + if (class_str != empty) - free(class_str); - + free (class_str); if (name_str != empty) - free(name_str); + free (name_str); if (desc_str != empty) - free(desc_str); + free (desc_str); - } else if ( strcmp (cp_name, "MethodRef") == 0 || - strcmp (cp_name, "FieldRef") == 0 || - strcmp (cp_name, "InterfaceMethodRef") == 0) { + } else if (strcmp (cp_name, "String") == 0) { + string_str = r_bin_java_get_utf8_from_bin_cp_list (BIN_OBJ, item->info.cp_string.string_idx); + if (!string_str) + string_str = empty; - /* - * The MethodRef, FieldRef, and InterfaceMethodRef structures - */ + memory_alloc = strlen (string_str) + 4; + + if (memory_alloc) + str = malloc (memory_alloc); + + if (str) { + snprintf (str, "\"%s\"", string_str); + } + + if (string_str != empty) + free (string_str); - class_str = r_bin_java_get_name_from_bin_cp_list(BIN_OBJ, item->info.cp_method.class_idx); - if (!class_str) - class_str = empty; - - name_str = r_bin_java_get_item_name_from_bin_cp_list(BIN_OBJ, item); + + } else if (strcmp (cp_name, "Utf8") == 0) { + str = malloc (item->info.cp_utf8.length+3); + if (str) { + snprintf (str, item->info.cp_utf8.length+3, "\"%s\"", item->info.cp_utf8.bytes); + } + } else if (strcmp (cp_name, "Long") == 0) { + str = malloc (34); + if (str) { + snprintf (str, 34, "0x%llx", rbin_java_raw_to_long (item->info.cp_long.bytes.raw,0)); + } + } else if (strcmp (cp_name, "Double") == 0) { + str = malloc (1000); + if (str) { + snprintf (str, 1000, "%f", rbin_java_raw_to_double (item->info.cp_double.bytes.raw,0)); + } + } else if (strcmp (cp_name, "Integer") == 0) { + str = malloc (34); + if (str) { + snprintf (str, 34, "0x%08x", R_BIN_JAVA_UINT (item->info.cp_integer.bytes.raw,0)); + } + } else if (strcmp (cp_name, "Float") == 0) { + str = malloc (34); + if (str) { + snprintf (str, 34, "%f", R_BIN_JAVA_FLOAT (item->info.cp_float.bytes.raw,0)); + } + } else if (strcmp (cp_name, "NameAndType") == 0) { + str = malloc (64); + if (str) { + + name_str = r_bin_java_get_item_name_from_bin_cp_list (BIN_OBJ, item); if (!name_str) name_str = empty; - desc_str = r_bin_java_get_item_desc_from_bin_cp_list(BIN_OBJ, item); + desc_str = r_bin_java_get_item_desc_from_bin_cp_list (BIN_OBJ, item); if (!desc_str) desc_str = empty; - memory_alloc = strlen(class_str) + strlen(name_str) + strlen(desc_str) + 3; - - if (memory_alloc) - str = malloc(memory_alloc); - - if (str) - snprintf (str, memory_alloc, "%s/%s%s", class_str, name_str, desc_str); - - if (class_str != empty) - free(class_str); - if (name_str != empty) - free(name_str); - if (desc_str != empty) - free(desc_str); - - } else if (strcmp (cp_name, "String") == 0) { - string_str = r_bin_java_get_utf8_from_bin_cp_list(BIN_OBJ, item->info.cp_string.string_idx); - if(!string_str) - string_str = empty; - - memory_alloc = strlen (string_str) + 4; - + memory_alloc = strlen (name_str) + strlen (desc_str) + 3; + if (memory_alloc) str = malloc (memory_alloc); - if (str) - sprintf (str, "\"%s\"", string_str); - if (string_str != empty) - free(string_str); - } else if (strcmp (cp_name, "Utf8") == 0) { - str = malloc(item->info.cp_utf8.length+3); - if (str){ - snprintf (str, item->info.cp_utf8.length+3, "\"%s\"", item->info.cp_utf8.bytes); - } - } else if (strcmp (cp_name, "Long") == 0) { - str = malloc(34); - if (str){ - snprintf (str, 34, "0x%llx", rbin_java_raw_to_long (item->info.cp_long.bytes.raw,0)); - } - } else if (strcmp (cp_name, "Double") == 0) { - str = malloc(1000); - if (str){ - snprintf (str, 1000, "%f", rbin_java_raw_to_double (item->info.cp_double.bytes.raw,0)); - } - } else if (strcmp (cp_name, "Integer") == 0) { - str = malloc(34); - if (str){ - snprintf (str, 34, "0x%08x", R_BIN_JAVA_UINT (item->info.cp_integer.bytes.raw,0)); - } - } else if (strcmp (cp_name, "Float") == 0) { - str = malloc(34); - if (str){ - snprintf (str, 34, "%f", R_BIN_JAVA_FLOAT (item->info.cp_float.bytes.raw,0)); - } - } else if (strcmp (cp_name, "NameAndType") == 0) { - str = malloc(64); - if (str){ - - name_str = r_bin_java_get_item_name_from_bin_cp_list(BIN_OBJ, item); - if (!name_str) - name_str = empty; - - desc_str = r_bin_java_get_item_desc_from_bin_cp_list(BIN_OBJ, item); - if (!desc_str) - desc_str = empty; - - memory_alloc = strlen(name_str) + strlen(desc_str) + 3; - - if (memory_alloc) - str = malloc(memory_alloc); - - if (str) - snprintf (str, memory_alloc, "%s%s", name_str, desc_str); - - if (name_str != empty) - free(name_str); - if (desc_str != empty) - free(desc_str); - } - } else{ - str = malloc(16); - if (str){ - snprintf (str, 16, "(null)"); - } + + if (str && !space_bn_name_type) + snprintf (str, memory_alloc, "%s%s", name_str, desc_str); + else if (str && space_bn_name_type) + snprintf (str, memory_alloc, "%s %s", name_str, desc_str); + + if (name_str != empty) + free (name_str); + if (desc_str != empty) + free (desc_str); } + } else { + str = malloc (16); + if (str) { + snprintf (str, 16, "(null)"); + } + } return str; } int java_print_opcode(ut64 addr, int idx, const ut8 *bytes, char *output, int outlen) { - char *arg = NULL; //(char *) malloc(1024); - + char *arg = NULL; //(char *) malloc (1024); + switch (java_ops[idx].byte) { - case 0x12: - case 0x13: - case 0x14: - arg = java_resolve ((int)USHORT (bytes, 1)); - if(arg){ - snprintf (output, outlen, "%s %s", java_ops[idx].name, arg); - free(arg); - }else{ - snprintf (output, outlen, "%s %s", java_ops[idx].name, "\0"); + + case 0x10: // "bipush" + snprintf (output, outlen, "%s %d", java_ops[idx].name, (char) bytes[1]); + return java_ops[idx].size; + case 0x11: + snprintf (output, outlen, "%s %d", java_ops[idx].name, (int)USHORT (bytes, 1)); + return java_ops[idx].size; + + case 0x15: // "iload" + case 0x16: // "lload" + case 0x17: // "fload" + case 0x18: // "dload" + case 0x19: // "aload" + case 0x37: // "lstore" + case 0x38: // "fstore" + case 0x39: // "dstore" + case 0x3a: // "astore" + case 0xbc: // "newarray" + case 0xa9: // ret + snprintf (output, outlen, "%s %d", java_ops[idx].name, bytes[1]); + return java_ops[idx].size; + + case 0x12: // ldc + arg = java_resolve_without_space ((ut16)bytes[1]); + if (arg) { + snprintf (output, outlen, "%s %s", java_ops[idx].name, arg); + free (arg); + }else { + snprintf (output, outlen, "%s %s", java_ops[idx].name, "\0"); + } + return java_ops[idx].size; + case 0x13: + case 0x14: + arg = java_resolve_without_space ((int)USHORT (bytes, 1)); + if (arg) { + snprintf (output, outlen, "%s %s", java_ops[idx].name, arg); + free (arg); + }else { + snprintf (output, outlen, "%s %s", java_ops[idx].name, "\0"); + } + return java_ops[idx].size; + + case 0x99: // ifeq + case 0x9a: // ifne + case 0x9b: // iflt + case 0x9c: // ifge + case 0x9d: // ifgt + case 0x9e: // ifle + case 0x9f: // if_icmpeq + case 0xa0: // if_icmpne + case 0xa1: // if_icmplt + case 0xa2: // if_icmpge + case 0xa3: // if_icmpgt + case 0xa4: // if_icmple + case 0xa5: // if_acmpne + case 0xa6: // if_acmpne + case 0xa7: // goto + case 0xa8: // jsr + snprintf (output, outlen, "%s 0x%08"PFMT64x, java_ops[idx].name, + addr+(int)(short)USHORT (bytes, 1)); + return java_ops[idx].size; + + case 0xb6: // invokevirtual + case 0xb7: // invokespecial + case 0xb8: // invokestatic + case 0xb9: // invokeinterface + case 0xba: // invokedynamic + arg = java_resolve_without_space ((int)USHORT (bytes, 1)); + if (arg) { + snprintf (output, outlen, "%s %s", java_ops[idx].name, arg); + free (arg); + }else { + snprintf (output, outlen, "%s %s", java_ops[idx].name, "WTF?!?" ); + } + return java_ops[idx].size; + + arg = java_resolve_without_space ((int)USHORT (bytes, 1)); + + case 0xb2: // getstatic + case 0xb4: // getfield + case 0xb5: // putfield + case 0xbb: // new + case 0xbd: // anewarray + case 0xc0: // checkcast + case 0xc1: // instance of + arg = java_resolve_with_space ((int)USHORT (bytes, 1)); + if (arg) { + snprintf (output, outlen, "%s %s", java_ops[idx].name, arg); + free (arg); + }else { + snprintf (output, outlen, "%s %s", java_ops[idx].name, "WTF?!?" ); + } + return java_ops[idx].size; } - return java_ops[idx].size; - - case 0x99: // ifeq - case 0x9a: // ifne - case 0x9b: // iflt - case 0x9c: // ifge - case 0x9d: // ifgt - case 0x9e: // ifle - case 0x9f: // if_icmpeq - case 0xa0: // if_icmpne - case 0xa1: // if_icmplt - case 0xa2: // if_icmpge - case 0xa3: // if_icmpgt - case 0xa4: // if_icmple - case 0xa5: // if_acmpne - case 0xa6: // if_acmpne - case 0xa7: // goto - case 0xa8: // jsr - snprintf (output, outlen, "%s 0x%08"PFMT64x, java_ops[idx].name, - addr+(int)(short)USHORT (bytes, 1)); - return java_ops[idx].size; - - case 0xb2: // getstatic - case 0xb6: // invokevirtual - arg = java_resolve ((int)USHORT (bytes, 1)); - if(arg){ - snprintf (output, outlen, "%s %s", java_ops[idx].name, arg); - free(arg); - }else{ - char test[2048]; - //RBinJavaCPTypeObj *itm = r_bin_java_get_name_from_bin_cp_list(BIN_OBJ, ((int)USHORT (bytes, 1))); - snprintf (output, outlen, "%s %s", java_ops[idx].name, "WTF?!?" ); - } - return java_ops[idx].size; - - case 0xb7: // invokespecial - arg = java_resolve ((int)USHORT (bytes, 1)); - if(arg){ - snprintf (output, outlen, "%s %s", java_ops[idx].name, arg); - free(arg); - }else{ - char test[2048]; - //RBinJavaCPTypeObj *itm = r_bin_java_get_name_from_bin_cp_list(BIN_OBJ, ((int)USHORT (bytes, 1))); - snprintf (output, outlen, "%s %s", java_ops[idx].name, "WTF?!?" ); - } - return java_ops[idx].size; - - case 0xb8: // invokestatic - case 0xb9: // invokeinterface - case 0xba: // invokedynamic - arg = java_resolve ((int)USHORT (bytes, 1)); - if(arg){ - snprintf (output, outlen, "%s %s", java_ops[idx].name, arg); - free(arg); - }else{ - char test[2048]; - //RBinJavaCPTypeObj *itm = r_bin_java_get_name_from_bin_cp_list(BIN_OBJ, ((int)USHORT (bytes, 1))); - snprintf (output, outlen, "%s %s", java_ops[idx].name, "WTF?!?" ); - } - return java_ops[idx].size; - - } /* process arguments */ switch (java_ops[idx].size) { @@ -286,7 +331,7 @@ int java_print_opcode(ut64 addr, int idx, const ut8 *bytes, char *output, int ou } R_API int r_java_disasm(ut64 addr, const ut8 *bytes, char *output, int outlen) { - //r_cons_printf("r_java_disasm: 0x%02x, 0x%0x.\n", bytes[0], addr); + //r_cons_printf ("r_java_disasm (allowed %d): 0x%02x, 0x%0x.\n", outlen, bytes[0], addr); return java_print_opcode (addr, bytes[0], bytes, output, outlen); } @@ -312,251 +357,3 @@ R_API int r_java_assemble(ut8 *bytes, const char *string) { } return 0; } - -#if 0 -unsigned short read_short(FILE *fd) { - unsigned short sh = 0; - fread (&sh, 2, 1, fd); - return r_num_ntohs (sh); -} - -static int attributes_walk(FILE *fd, int sz2, int fields, int verbose) { - char *name, buf[99999]; - int sz, k, j=0; - - for (j=0;jvalue; - V printf(" %2d: Name Index: %d (%s)\n", j, USHORT(buf,0), name); - // TODO add comment with constant pool index - if (fields) { - V printf("FIELD\n"); - } else { - V printf (" Length: %d\n", UINT (buf, 2)); - if (!name) { - printf ("**ERROR ** Cannot identify attribute name into constant pool\n"); - continue; - } - if (!strcmp (name, "Code")) { - fread(buf, 8, 1, fd); - - V printf(" Max Stack: %d\n", USHORT(buf, 0)); - V printf(" Max Locals: %d\n", USHORT(buf, 2)); - V printf(" Code Length: %d\n", UINT(buf, 4)); - V printf(" Code At Offset: 0x%08"PFMT64x"\n", (ut64)ftell(fd)); - - fread(buf, UINT(buf, 4), 1, fd); // READ CODE - sz = read_short(fd); - V printf(" Exception table length: %d\n", sz); - for (k=0;k0) - attributes_walk(fd, sz, fields, verbose); - } else - if (!strcmp(name, "LineNumberTable")) { - sz = (int)read_short(fd); - V printf(" Table Length: %d\n", sz); - for(k=0;kname); - - /* store constant pool item */ - strcpy (cp_items[i].name, c->name); - cp_items[i].tag = c->tag; - cp_items[i].value = NULL; // no string by default - cp_items[i].off = ftell(fd)-1; - - /* read bytes */ - switch (c->tag) { - case 1: // utf 8 string - fread (buf, 2, 1, fd); - sz = USHORT (buf,0); - //cp_items[i].len = sz; - fread(buf, sz, 1, fd); - buf[sz] = '\0'; - break; - default: - fread(buf, c->len, 1, fd); - } - - memcpy (cp_items[i].bytes, buf, 5); - - /* parse value */ - switch(c->tag) { - case 1: - V printf ("%s\n", buf); - cp_items[i].value = strdup(buf); - break; - case 7: - V printf ("%d\n", USHORT(buf,0)); - break; - case 8: - V printf ("string ptr %d\n", USHORT(buf, 0)); - break; - case 9: - case 11: - case 10: // METHOD REF - V printf("class = %d, ", USHORT(buf,0)); - V printf("name_type = %d\n", USHORT(buf,2)); - break; - case 12: - V printf("name = %d, ", USHORT(buf,0)); - V printf("descriptor = %d\n", USHORT(buf,2)); - break; - default: - V printf("%d\n", UINT(buf, 40)); - } - } - - fread (&cf2, sizeof (RBinJavaClass2), 1, fd); - check_eof(fd); - V printf("Access flags: 0x%04x\n", cf2.access_flags); - this_class = r_num_ntohs (cf2.this_class); - V printf ("This class: %d\n", this_class); - check_eof (fd); - //printf("This class: %d (%s)\n", ntohs(cf2.this_class), cp_items[ntohs(cf2.this_class)-1].value); // XXX this is a double pointer !!1 - //printf("Super class: %d (%s)\n", ntohs(cf2.super_class), cp_items[ntohs(cf2.super_class)-1].value); - sz = read_short (fd); - V printf ("Interfaces count: %d\n", sz); - if (sz>0) { - fread (buf, sz*2, 1, fd); - sz = read_short (fd); - for (i=0; i0) { - for (i=0;ivalue); - V printf(" Descriptor Index: %d\n", USHORT(buf, 4)); //, cp_items[USHORT(buf, 4)-1].value); - - sz2 = USHORT(buf, 6); - V printf(" field Attributes Count: %d\n", sz2); - attributes_walk(fd, sz2, 1, verbose); - } - } - - sz = read_short(fd); - V printf("Methods count: %d\n", sz); - if (sz>0) { - for (i=0;ivalue); - V printf(" Descriptor Index: %d (%s)\n", USHORT(buf, 4), get_cp(USHORT(buf, 4)-1)->value); - - sz2 = USHORT(buf, 6); - V printf(" method Attributes Count: %d\n", sz2); - attributes_walk(fd, sz2, 0, verbose); - } - } - - fclose(fd); - return 0; -} -#endif diff --git a/shlr/java/code.h b/shlr/java/code.h index 2e2f74a6d4..f3b8bdcee9 100644 --- a/shlr/java/code.h +++ b/shlr/java/code.h @@ -12,7 +12,9 @@ struct java_op { extern struct java_op java_ops[]; -static char * java_resolve(int idx); +static char * java_resolve_with_space(int idx); +static char * java_resolve_without_space(int idx); +static char * java_resolve(int idx, ut8 space_bn_name_type); int java_print_opcode(ut64 addr, int idx, const ut8 *bytes, char *output, int outlen); //int r_java_disasm(const ut8 *bytes, char *output, int len); unsigned short read_short(FILE *fd); diff --git a/shlr/java/ops.c b/shlr/java/ops.c index 5d2fafcbad..d7499982db 100644 --- a/shlr/java/ops.c +++ b/shlr/java/ops.c @@ -54,11 +54,11 @@ struct java_op java_ops[] = { { "laload" , 0x2f , 1 }, { "faload" , 0x30 , 1 }, { "daload" , 0x31 , 1 }, - { "UNDEFINED" , 0x32 , 1 }, + { "UNDEFINED" , 0x32 , 1 }, { "baload" , 0x33 , 1 }, { "caload" , 0x34 , 1 }, { "saload" , 0x35 , 1 }, - { "sastore" , 0x36 , 1 }, + { "istore" , 0x36 , 1 }, { "lstore" , 0x37 , 2 }, { "fstore" , 0x38 , 2 }, { "dstore" , 0x39 , 2 }, @@ -87,10 +87,10 @@ struct java_op java_ops[] = { { "lastore" , 0x50 , 1 }, { "fastore" , 0x51 , 1 }, { "dastore" , 0x52 , 1 }, - { "UNDEFINED" , 0x53 , 1 }, + { "aastore" , 0x53 , 1 }, { "bastore" , 0x54 , 1 }, { "castore" , 0x55 , 1 }, - { "UNDEFINED" , 0x56 , 1 }, + { "sastore" , 0x56 , 1 }, { "pop" , 0x57 , 1 }, { "pop2" , 0x58 , 1 }, { "dup" , 0x59 , 1 }, @@ -190,10 +190,10 @@ struct java_op java_ops[] = { { "invokespecial" , 0xb7 , 3 }, { "invokestatic" , 0xb8 , 3 }, { "invokeinterface" , 0xb9 , 5 }, - { "unused" , 0xba , 1 }, + { "invokedynamic" , 0xba , 5 }, { "new" , 0xbb , 3 }, { "newarray" , 0xbc , 2 }, - { "UNDEFINED" , 0xbd , 1 }, + { "anewarray" , 0xbd , 3 }, { "arraylength" , 0xbe , 1 }, { "athrow" , 0xbf , 1 }, { "checkcast" , 0xc0 , 3 }, @@ -201,64 +201,63 @@ struct java_op java_ops[] = { { "monitorenter" , 0xc2 , 1 }, { "monitorexit" , 0xc3 , 1 }, { "wide" , 0xc4 , 1 }, - { "multinewarray" , 0xc5 , 3 }, + { "multinewarray" , 0xc5 , 4 }, { "ifnull" , 0xc6 , 3 }, { "ifnonnull" , 0xc7 , 3 }, { "goto_w" , 0xc8 , 5 }, { "jsr_w" , 0xc9 , 5 }, { "breakpoint" , 0xca , 1 }, - { "UNDEFINED" , 0xcb , 1 }, - { "UNDEFINED" , 0xcc , 1 }, - { "UNDEFINED" , 0xcd , 1 }, - { "UNDEFINED" , 0xce , 1 }, - { "UNDEFINED" , 0xcf , 1 }, - { "UNDEFINED" , 0xd0 , 1 }, - { "UNDEFINED" , 0xd1 , 1 }, - { "UNDEFINED" , 0xd2 , 1 }, - { "UNDEFINED" , 0xd3 , 1 }, - { "UNDEFINED" , 0xd4 , 1 }, - { "UNDEFINED" , 0xd5 , 1 }, - { "UNDEFINED" , 0xd6 , 1 }, - { "UNDEFINED" , 0xd7 , 1 }, - { "UNDEFINED" , 0xd8 , 1 }, - { "UNDEFINED" , 0xd9 , 1 }, - { "UNDEFINED" , 0xda , 1 }, - { "UNDEFINED" , 0xdb , 1 }, - { "UNDEFINED" , 0xdc , 1 }, - { "UNDEFINED" , 0xdd , 1 }, - { "UNDEFINED" , 0xde , 1 }, - { "UNDEFINED" , 0xdf , 1 }, - { "UNDEFINED" , 0xe0 , 1 }, - { "UNDEFINED" , 0xe1 , 1 }, - { "UNDEFINED" , 0xe2 , 1 }, - { "UNDEFINED" , 0xe3 , 1 }, - { "UNDEFINED" , 0xe4 , 1 }, - { "UNDEFINED" , 0xe5 , 1 }, - { "UNDEFINED" , 0xe6 , 1 }, - { "UNDEFINED" , 0xe7 , 1 }, - { "UNDEFINED" , 0xe8 , 1 }, - { "UNDEFINED" , 0xe9 , 1 }, - { "UNDEFINED" , 0xea , 1 }, - { "UNDEFINED" , 0xeb , 1 }, - { "UNDEFINED" , 0xec , 1 }, - { "UNDEFINED" , 0xed , 1 }, - { "UNDEFINED" , 0xee , 1 }, - { "UNDEFINED" , 0xef , 1 }, - { "UNDEFINED" , 0xf0 , 1 }, - { "UNDEFINED" , 0xf1 , 1 }, - { "UNDEFINED" , 0xf2 , 1 }, - { "UNDEFINED" , 0xf3 , 1 }, - { "UNDEFINED" , 0xf4 , 1 }, - { "UNDEFINED" , 0xf5 , 1 }, - { "UNDEFINED" , 0xf6 , 1 }, - { "UNDEFINED" , 0xf7 , 1 }, - { "UNDEFINED" , 0xf8 , 1 }, - { "UNDEFINED" , 0xf9 , 1 }, - { "UNDEFINED" , 0xfa , 1 }, - { "UNDEFINED" , 0xfb , 1 }, - { "UNDEFINED" , 0xfc , 1 }, - { "UNDEFINED" , 0xfd , 1 }, + { "UNDEFINED" , 0xcb , 1 }, + { "UNDEFINED" , 0xcc , 1 }, + { "UNDEFINED" , 0xcd , 1 }, + { "UNDEFINED" , 0xce , 1 }, + { "UNDEFINED" , 0xcf , 1 }, + { "UNDEFINED" , 0xd0 , 1 }, + { "UNDEFINED" , 0xd1 , 1 }, + { "UNDEFINED" , 0xd2 , 1 }, + { "UNDEFINED" , 0xd3 , 1 }, + { "UNDEFINED" , 0xd4 , 1 }, + { "UNDEFINED" , 0xd5 , 1 }, + { "UNDEFINED" , 0xd6 , 1 }, + { "UNDEFINED" , 0xd7 , 1 }, + { "UNDEFINED" , 0xd8 , 1 }, + { "UNDEFINED" , 0xd9 , 1 }, + { "UNDEFINED" , 0xda , 1 }, + { "UNDEFINED" , 0xdb , 1 }, + { "UNDEFINED" , 0xdc , 1 }, + { "UNDEFINED" , 0xdd , 1 }, + { "UNDEFINED" , 0xde , 1 }, + { "UNDEFINED" , 0xdf , 1 }, + { "UNDEFINED" , 0xe0 , 1 }, + { "UNDEFINED" , 0xe1 , 1 }, + { "UNDEFINED" , 0xe2 , 1 }, + { "UNDEFINED" , 0xe3 , 1 }, + { "UNDEFINED" , 0xe4 , 1 }, + { "UNDEFINED" , 0xe5 , 1 }, + { "UNDEFINED" , 0xe6 , 1 }, + { "UNDEFINED" , 0xe7 , 1 }, + { "UNDEFINED" , 0xe8 , 1 }, + { "UNDEFINED" , 0xe9 , 1 }, + { "UNDEFINED" , 0xea , 1 }, + { "UNDEFINED" , 0xeb , 1 }, + { "UNDEFINED" , 0xec , 1 }, + { "UNDEFINED" , 0xed , 1 }, + { "UNDEFINED" , 0xee , 1 }, + { "UNDEFINED" , 0xef , 1 }, + { "UNDEFINED" , 0xf0 , 1 }, + { "UNDEFINED" , 0xf1 , 1 }, + { "UNDEFINED" , 0xf2 , 1 }, + { "UNDEFINED" , 0xf3 , 1 }, + { "UNDEFINED" , 0xf4 , 1 }, + { "UNDEFINED" , 0xf5 , 1 }, + { "UNDEFINED" , 0xf6 , 1 }, + { "UNDEFINED" , 0xf7 , 1 }, + { "UNDEFINED" , 0xf8 , 1 }, + { "UNDEFINED" , 0xf9 , 1 }, + { "UNDEFINED" , 0xfa , 1 }, + { "UNDEFINED" , 0xfb , 1 }, + { "UNDEFINED" , 0xfc , 1 }, + { "UNDEFINED" , 0xfd , 1 }, { "impdep1" , 0xfe , 1 }, - { "impdep2" , 0xff , 1 }, - { NULL, 0, 0 } -}; + { "impdep2" , 0xff , 1 } +}; \ No newline at end of file