static void search_print_all_strings(r_binfmt_s *bin, r_binfmt_segment_s *seg) { u64 i; int cur_len; char flag_str[4]; int found = 0; int addr_size; cur_len = 0; r_binfmt_get_segment_flag_str(flag_str, seg); addr_size = r_binfmt_addr_size(bin->arch); for(i = 0; i < seg->length; i++) { if(isprint(seg->start[i])) { cur_len++; } else { if(cur_len >= search_options_strlen) { if(!r_binfmt_is_bad_addr(search_options_bad, (seg->addr+i)-cur_len, bin->arch)) { R_UTILS_PRINT_BLACK_BG_WHITE(search_options_color, " %s ", flag_str); if(addr_size == 4) { R_UTILS_PRINT_GREEN_BG_BLACK(search_options_color, " %#.8" PRIx32 " ", (u32)((seg->addr + i) - cur_len)); } else { R_UTILS_PRINT_GREEN_BG_BLACK(search_options_color, " %#.16" PRIx64 " ", (seg->addr + i) - cur_len); } R_UTILS_PRINT_WHITE_BG_BLACK(search_options_color, "-> "); R_UTILS_PRINT_RED_BG_BLACK(search_options_color, "%.*s\n", cur_len, (char*)&seg->start[i-cur_len]); found++; } } cur_len = 0; } } R_UTILS_PRINT_YELLOW_BG_BLACK(search_options_color, " %d strings found.\n", found); }
int search_print_bytes_in_mem(r_binfmt_s *bin, byte_t *bytes, u64 len) { r_binfmt_mem_s *m; r_utils_bytes_s b; char *string; char flag_str[4]; int addr_size; u64 i; addr_size = r_binfmt_addr_size(bin->arch); for(m = bin->mlist->head; m != NULL; m = m->next) { if(m->flags & R_BINFMT_MEM_FLAG_PROT_R) { if(len <= m->length) { r_binfmt_get_mem_flag_str(flag_str, m); for(i = 0; i < m->length - len; i++) { if(!r_binfmt_is_bad_addr(search_options_bad, m->addr+i, bin->arch)) { if(!memcmp(m->start+i, bytes, len)) { b.bytes = bytes; b.len = len; string = r_utils_bytes_hexlify(&b); R_UTILS_PRINT_BLACK_BG_WHITE(search_options_color, " %s ", flag_str); if(addr_size == 4) { R_UTILS_PRINT_GREEN_BG_BLACK(search_options_color, " %#.8" PRIx32 " ", (u32)(m->addr + i)); } else { R_UTILS_PRINT_GREEN_BG_BLACK(search_options_color, " %#.16" PRIx64 " ", m->addr + i); } R_UTILS_PRINT_WHITE_BG_BLACK(search_options_color, "-> "); R_UTILS_PRINT_RED_BG_BLACK(search_options_color, "%s\n", string); free(string); return 1; } } } } } } return 0; }