Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}