Make /az faster after aeim, skipping unrelated regions ##search
This commit is contained in:
parent
5328afc86b
commit
8f0e9451b7
|
@ -11729,7 +11729,7 @@ static int cmd_anal_all(RCore *core, const char *input) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input[1] == 'a') { // "aaaa"
|
if (input[1] == 'a') { // "aaaa"
|
||||||
r_core_cmd0 (core, "/azq > /dev/null");
|
r_core_cmd0 (core, "/azq");
|
||||||
if (!didAap) {
|
if (!didAap) {
|
||||||
didAap = true;
|
didAap = true;
|
||||||
R_LOG_INFO ("Finding function preludes");
|
R_LOG_INFO ("Finding function preludes");
|
||||||
|
|
|
@ -2280,6 +2280,11 @@ static void search_hit_at(RCore *core, struct search_parameters *param, RCoreAsm
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool do_analstr_search(RCore *core, struct search_parameters *param, bool quiet, const char *input) {
|
static bool do_analstr_search(RCore *core, struct search_parameters *param, bool quiet, const char *input) {
|
||||||
|
bool silent = false;
|
||||||
|
if (!input) {
|
||||||
|
input = "";
|
||||||
|
silent = true;
|
||||||
|
}
|
||||||
ut64 at;
|
ut64 at;
|
||||||
RAnalOp aop;
|
RAnalOp aop;
|
||||||
int hasch = 0;
|
int hasch = 0;
|
||||||
|
@ -2305,13 +2310,24 @@ static bool do_analstr_search(RCore *core, struct search_parameters *param, bool
|
||||||
r_list_foreach (param->boundaries, iter, map) {
|
r_list_foreach (param->boundaries, iter, map) {
|
||||||
ut64 from = r_io_map_begin (map);
|
ut64 from = r_io_map_begin (map);
|
||||||
ut64 to = r_io_map_end (map);
|
ut64 to = r_io_map_end (map);
|
||||||
|
if (!(map->perm & R_PERM_X)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (i = 0, at = from; at < to; i++, at++) {
|
for (i = 0, at = from; at < to; i++, at++) {
|
||||||
if (r_cons_is_breaked ()) {
|
if (r_cons_is_breaked ()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
at = from + i;
|
at = from + i;
|
||||||
ut8 bufop[32];
|
ut8 bufop[32] = {0};
|
||||||
r_io_read_at (core->io, at, bufop, sizeof (bufop));
|
if (!r_io_read_at (core->io, at, bufop, sizeof (bufop))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
bool fail = !memcmp (bufop, "\xff\xff\xff\xff", 4);
|
||||||
|
if (fail) {
|
||||||
|
R_LOG_DEBUG ("Invalid read at 0x%08"PFMT64x, at);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ret = r_anal_op (core->anal, &aop, at, bufop, sizeof (bufop), R_ANAL_OP_MASK_BASIC | R_ANAL_OP_MASK_DISASM);
|
ret = r_anal_op (core->anal, &aop, at, bufop, sizeof (bufop), R_ANAL_OP_MASK_BASIC | R_ANAL_OP_MASK_DISASM);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (hasch > 0) {
|
if (hasch > 0) {
|
||||||
|
@ -2346,7 +2362,6 @@ static bool do_analstr_search(RCore *core, struct search_parameters *param, bool
|
||||||
char ch2 = (aop.val >> 16) & 0xff;
|
char ch2 = (aop.val >> 16) & 0xff;
|
||||||
char ch3 = (aop.val >> 24) & 0xff;
|
char ch3 = (aop.val >> 24) & 0xff;
|
||||||
if (IS_PRINTABLE (ch0) && IS_PRINTABLE (ch1) && IS_PRINTABLE (ch2)) {
|
if (IS_PRINTABLE (ch0) && IS_PRINTABLE (ch1) && IS_PRINTABLE (ch2)) {
|
||||||
eprintf ("JAJA LE STRING IS %c %c %c %c\n", ch0, ch1, ch2, ch3);
|
|
||||||
char chstr[2] = {ch0, 0};
|
char chstr[2] = {ch0, 0};
|
||||||
r_strbuf_append (sb, chstr);
|
r_strbuf_append (sb, chstr);
|
||||||
chstr[0] = ch1;
|
chstr[0] = ch1;
|
||||||
|
@ -2405,9 +2420,15 @@ static bool do_analstr_search(RCore *core, struct search_parameters *param, bool
|
||||||
r_list_free (words);
|
r_list_free (words);
|
||||||
free (word);
|
free (word);
|
||||||
r_cons_break_pop ();
|
r_cons_break_pop ();
|
||||||
|
if (silent) {
|
||||||
|
r_strbuf_free (rb);
|
||||||
|
} else {
|
||||||
char *res = r_strbuf_drain (rb);
|
char *res = r_strbuf_drain (rb);
|
||||||
|
if (R_STR_ISNOTEMPTY (res)) {
|
||||||
r_cons_println (res);
|
r_cons_println (res);
|
||||||
|
}
|
||||||
free (res);
|
free (res);
|
||||||
|
}
|
||||||
r_strbuf_free (sb);
|
r_strbuf_free (sb);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -3828,16 +3849,25 @@ reread:
|
||||||
dosearch = false;
|
dosearch = false;
|
||||||
break;
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
if (input[2] == '?') { // "/az"
|
switch (input[2]) {
|
||||||
|
case '?': // "/az"
|
||||||
r_core_cmd_help_match (core, help_msg_slash_a, "/az", true);
|
r_core_cmd_help_match (core, help_msg_slash_a, "/az", true);
|
||||||
} else if (input[2] == 'q') { // "/azq"
|
break;
|
||||||
|
case 'q': // "/azq"
|
||||||
do_analstr_search (core, ¶m, true, r_str_trim_head_ro (input + 3));
|
do_analstr_search (core, ¶m, true, r_str_trim_head_ro (input + 3));
|
||||||
} else if (input[2] == ' ') { // "/az [num]"
|
break;
|
||||||
|
case 's': // "/azs"
|
||||||
|
do_analstr_search (core, ¶m, true, NULL);
|
||||||
|
break;
|
||||||
|
case ' ': // "/az [num]"
|
||||||
do_analstr_search (core, ¶m, false, r_str_trim_head_ro (input + 2));
|
do_analstr_search (core, ¶m, false, r_str_trim_head_ro (input + 2));
|
||||||
} else if (input[2] == 0) { // "/az"
|
break;
|
||||||
|
case 0:
|
||||||
do_analstr_search (core, ¶m, false, "");
|
do_analstr_search (core, ¶m, false, "");
|
||||||
} else {
|
break;
|
||||||
|
default:
|
||||||
r_core_cmd_help_match (core, help_msg_slash_a, "/az", true);
|
r_core_cmd_help_match (core, help_msg_slash_a, "/az", true);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
dosearch = false;
|
dosearch = false;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue