Remove dead code of /b.
/b (backward search) was apparently not used anywhere anymore.
This commit is contained in:
parent
154421ddbb
commit
56b4f77916
4 changed files with 48 additions and 159 deletions
|
|
@ -1768,7 +1768,6 @@ RZ_API int rz_core_analysis_search(RzCore *core, ut64 from, ut64 to, ut64 ref, i
|
|||
int i, count = 0;
|
||||
RzAnalysisOp op = { 0 };
|
||||
ut64 at;
|
||||
char bckwrds, do_bckwrd_srch;
|
||||
int arch = -1;
|
||||
if (core->rasm->bits == 64) {
|
||||
// speedup search
|
||||
|
|
@ -1776,10 +1775,6 @@ RZ_API int rz_core_analysis_search(RzCore *core, ut64 from, ut64 to, ut64 ref, i
|
|||
arch = RZ_ARCH_ARM64;
|
||||
}
|
||||
}
|
||||
// TODO: get current section range here
|
||||
// ???
|
||||
// XXX must read bytes correctly
|
||||
do_bckwrd_srch = bckwrds = core->search->bckwrds;
|
||||
if (core->file) {
|
||||
rz_io_use_fd(core->io, core->file->fd);
|
||||
}
|
||||
|
|
@ -1790,17 +1785,8 @@ RZ_API int rz_core_analysis_search(RzCore *core, ut64 from, ut64 to, ut64 ref, i
|
|||
}
|
||||
rz_cons_break_push(NULL, NULL);
|
||||
if (core->blocksize > OPSZ) {
|
||||
if (bckwrds) {
|
||||
if (from + core->blocksize > to) {
|
||||
at = from;
|
||||
do_bckwrd_srch = false;
|
||||
} else {
|
||||
at = to - core->blocksize;
|
||||
}
|
||||
} else {
|
||||
at = from;
|
||||
}
|
||||
while ((!bckwrds && at < to) || bckwrds) {
|
||||
at = from;
|
||||
while (at < to) {
|
||||
eprintf("\r[0x%08" PFMT64x "-0x%08" PFMT64x "] ", at, to);
|
||||
if (rz_cons_is_breaked()) {
|
||||
break;
|
||||
|
|
@ -1810,10 +1796,7 @@ RZ_API int rz_core_analysis_search(RzCore *core, ut64 from, ut64 to, ut64 ref, i
|
|||
RZ_LOG_ERROR("core: failed to read at 0x%08" PFMT64x "\n", at);
|
||||
break;
|
||||
}
|
||||
for (i = bckwrds ? (core->blocksize - OPSZ - 1) : 0;
|
||||
(!bckwrds && i < core->blocksize - OPSZ) ||
|
||||
(bckwrds && i > 0);
|
||||
bckwrds ? i-- : i++) {
|
||||
for (i = 0; (i < core->blocksize - OPSZ); i++) {
|
||||
// TODO: honor analysis.align
|
||||
if (rz_cons_is_breaked()) {
|
||||
break;
|
||||
|
|
@ -1896,19 +1879,7 @@ RZ_API int rz_core_analysis_search(RzCore *core, ut64 from, ut64 to, ut64 ref, i
|
|||
i += op.size - 1;
|
||||
rz_analysis_op_fini(&op);
|
||||
}
|
||||
if (bckwrds) {
|
||||
if (!do_bckwrd_srch) {
|
||||
break;
|
||||
}
|
||||
if (at > from + core->blocksize - OPSZ) {
|
||||
at -= core->blocksize;
|
||||
} else {
|
||||
do_bckwrd_srch = false;
|
||||
at = from;
|
||||
}
|
||||
} else {
|
||||
at += core->blocksize - OPSZ;
|
||||
}
|
||||
at += core->blocksize - OPSZ;
|
||||
}
|
||||
} else {
|
||||
RZ_LOG_ERROR("core: block size too small\n");
|
||||
|
|
|
|||
|
|
@ -941,9 +941,6 @@ static void do_string_search(RzCore *core, RzInterval search_itv, struct search_
|
|||
if (!param->regex_search && !(buf = malloc(core->blocksize))) {
|
||||
return;
|
||||
}
|
||||
if (search->bckwrds) {
|
||||
rz_search_string_prepare_backward(search);
|
||||
}
|
||||
rz_cons_break_push(NULL, NULL);
|
||||
// TODO search cross boundary
|
||||
rz_list_foreach (param->boundaries, iter, map) {
|
||||
|
|
@ -965,53 +962,42 @@ static void do_string_search(RzCore *core, RzInterval search_itv, struct search_
|
|||
}
|
||||
eprintf(" in [0x%" PFMT64x ",0x%" PFMT64x ")\n", itv.addr, rz_itv_end(itv));
|
||||
}
|
||||
if (!core->search->bckwrds) {
|
||||
RzListIter *it;
|
||||
RzSearchKeyword *kw;
|
||||
rz_list_foreach (core->search->kws, it, kw) {
|
||||
kw->last = 0;
|
||||
}
|
||||
RzListIter *it;
|
||||
RzSearchKeyword *kw;
|
||||
rz_list_foreach (core->search->kws, it, kw) {
|
||||
kw->last = 0;
|
||||
}
|
||||
|
||||
const ut64 from = itv.addr, to = rz_itv_end(itv),
|
||||
from1 = search->bckwrds ? to : from,
|
||||
to1 = search->bckwrds ? from : to;
|
||||
from1 = from,
|
||||
to1 = to;
|
||||
ut64 len;
|
||||
size_t c = 0;
|
||||
for (at = from1; at != to1; at = search->bckwrds ? at - len : at + len, c++) {
|
||||
for (at = from1; at != to1; at = at + len) {
|
||||
print_search_progress(at, to1, search->nhits, param, c);
|
||||
if (rz_cons_is_breaked()) {
|
||||
eprintf("\n\n");
|
||||
break;
|
||||
}
|
||||
if (search->bckwrds) {
|
||||
len = RZ_MIN(core->blocksize, at - from);
|
||||
// TODO prefix_read_at
|
||||
if (!rz_io_is_valid_offset(core->io, at - len, 0)) {
|
||||
break;
|
||||
if (param->regex_search) {
|
||||
// Since regex match length can be infinite, for 100% correctness
|
||||
// it is not possible to chunk the search. This could be a problem
|
||||
// for large binaries.
|
||||
free(buf);
|
||||
len = to - at;
|
||||
if (!(buf = malloc(len))) {
|
||||
RZ_LOG_ERROR("Cannot allocate search buffer"
|
||||
" of size 0x%" PFMT64x "\n",
|
||||
len);
|
||||
return;
|
||||
}
|
||||
(void)rz_io_read_at(core->io, at - len, buf, len);
|
||||
} else {
|
||||
if (param->regex_search) {
|
||||
// Since regex match length can be infinite, for 100% correctness
|
||||
// it is not possible to chunk the search. This could be a problem
|
||||
// for large binaries.
|
||||
free(buf);
|
||||
len = to - at;
|
||||
if (!(buf = malloc(len))) {
|
||||
RZ_LOG_ERROR("Cannot allocate search buffer"
|
||||
" of size 0x%" PFMT64x "\n",
|
||||
len);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
len = RZ_MIN(core->blocksize, to - at);
|
||||
}
|
||||
if (!rz_io_is_valid_offset(core->io, at, 0)) {
|
||||
break;
|
||||
}
|
||||
(void)rz_io_read_at(core->io, at, buf, len);
|
||||
len = RZ_MIN(core->blocksize, to - at);
|
||||
}
|
||||
if (!rz_io_is_valid_offset(core->io, at, 0)) {
|
||||
break;
|
||||
}
|
||||
(void)rz_io_read_at(core->io, at, buf, len);
|
||||
rz_search_update(core->search, at, buf, len);
|
||||
if (param->aes_search) {
|
||||
// Adjust length to search between blocks.
|
||||
|
|
@ -1449,7 +1435,6 @@ static int cmd_search_legacy_handler(void *data, const char *input) {
|
|||
core->search->maxhits = rz_config_get_i(core->config, "search.maxhits");
|
||||
param.hit_prefix = rz_config_get(core->config, "search.prefix");
|
||||
core->search->overlap = rz_config_get_i(core->config, "search.overlap");
|
||||
core->search->bckwrds = false;
|
||||
|
||||
/* Quick & dirty check for json output */
|
||||
if (input[0] && (input[1] == 'j') && (input[0] != ' ')) {
|
||||
|
|
@ -1464,22 +1449,6 @@ reread:
|
|||
input++;
|
||||
param.inverse = true;
|
||||
goto reread;
|
||||
case 'b': // "/b" backward search
|
||||
if (*(++input) == '?') {
|
||||
RZ_LOG_ERROR("core: Usage: /b<command> [value] backward search, see '/?'\n");
|
||||
goto beach;
|
||||
}
|
||||
search->bckwrds = true;
|
||||
if (core->offset) {
|
||||
RzInterval itv = { 0, core->offset };
|
||||
if (!rz_itv_overlap(search_itv, itv)) {
|
||||
ret = false;
|
||||
goto beach;
|
||||
} else {
|
||||
search_itv = rz_itv_intersect(search_itv, itv);
|
||||
}
|
||||
}
|
||||
goto reread;
|
||||
case 'r': // "/r"
|
||||
{
|
||||
ut64 n = (input[1] == ' ' || (input[1] && input[2] == ' '))
|
||||
|
|
|
|||
|
|
@ -70,7 +70,6 @@ typedef struct rz_search_t {
|
|||
int (*update)(struct rz_search_t *s, ut64 from, const ut8 *buf, int len);
|
||||
RzList /*<RzSearchKeyword *>*/ *kws; // TODO: Use rz_search_kw_new ()
|
||||
RzIOBind iob;
|
||||
char bckwrds;
|
||||
int preludecnt; ///< Counts found preludes.
|
||||
} RzSearch;
|
||||
|
||||
|
|
@ -104,7 +103,6 @@ RZ_API RzSearchKeyword *rz_search_keyword_new_regexp(const char *str, const char
|
|||
RZ_API int rz_search_kw_add(RzSearch *s, RzSearchKeyword *kw);
|
||||
RZ_API void rz_search_reset(RzSearch *s, int mode);
|
||||
RZ_API void rz_search_kw_reset(RzSearch *s);
|
||||
RZ_API void rz_search_string_prepare_backward(RzSearch *s);
|
||||
|
||||
// TODO: is this an internal API?
|
||||
RZ_API int rz_search_mybinparse_update(RzSearch *s, ut64 from, const ut8 *buf, int len);
|
||||
|
|
|
|||
|
|
@ -154,13 +154,13 @@ RZ_API int rz_search_legacy_hit_new(RzSearch *s, RzSearchKeyword *kw, ut64 addr)
|
|||
if (!s->contiguous) {
|
||||
if (kw->last && addr == kw->last) {
|
||||
kw->count--;
|
||||
kw->last = s->bckwrds ? addr : addr + kw->keyword_length;
|
||||
kw->last = addr + kw->keyword_length;
|
||||
eprintf("0x%08" PFMT64x " Sequential hit ignored.\n", addr);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
// kw->last is used by string search, the right endpoint of last match (forward search), to honor search.overlap
|
||||
kw->last = s->bckwrds ? addr : addr + kw->keyword_length;
|
||||
kw->last = addr + kw->keyword_length;
|
||||
|
||||
if (s->callback) {
|
||||
int ret = s->callback(kw, s->user, addr);
|
||||
|
|
@ -207,32 +207,17 @@ RZ_API int rz_search_deltakey_update(RzSearch *s, ut64 from, const ut8 *buf, int
|
|||
}
|
||||
s->data = left;
|
||||
left->len = 0;
|
||||
if (s->bckwrds) {
|
||||
rz_list_foreach (s->kws, iter, kw) {
|
||||
ut8 *i = kw->bin_keyword, *j = kw->bin_keyword + kw->keyword_length;
|
||||
for (; i < j; i++) {
|
||||
*i = -*i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (s->bckwrds) {
|
||||
// XXX Change function signature from const ut8 * to ut8 *
|
||||
ut8 *i = (ut8 *)buf, *j = i + len;
|
||||
while (i < j) {
|
||||
ut8 t = *i;
|
||||
*i++ = *--j;
|
||||
*j = t;
|
||||
}
|
||||
}
|
||||
|
||||
ut64 len1 = left->len + RZ_MIN(longest - 1, len);
|
||||
memcpy(left->data + left->len, buf, len1 - left->len);
|
||||
rz_list_foreach (s->kws, iter, kw) {
|
||||
ut8 *a = kw->bin_keyword;
|
||||
i = s->overlap || !kw->count ? 0 : s->bckwrds ? kw->last - from < left->len ? from + left->len - kw->last : 0
|
||||
: from - kw->last < left->len ? kw->last + left->len - from
|
||||
: 0;
|
||||
i = s->overlap ||
|
||||
!kw->count
|
||||
? 0
|
||||
: from - kw->last < left->len ? kw->last + left->len - from
|
||||
: 0;
|
||||
for (; i + kw->keyword_length < len1 && i < left->len; i++) {
|
||||
if ((ut8)(left->data[i + 1] - left->data[i]) == a[0]) {
|
||||
j = 1;
|
||||
|
|
@ -240,8 +225,8 @@ RZ_API int rz_search_deltakey_update(RzSearch *s, ut64 from, const ut8 *buf, int
|
|||
j++;
|
||||
}
|
||||
if (j == kw->keyword_length) {
|
||||
int t = rz_search_legacy_hit_new(s, kw, s->bckwrds ? from - kw->keyword_length - 1 - i + left->len : from + i - left->len);
|
||||
kw->last += s->bckwrds ? 0 : 1;
|
||||
int t = rz_search_legacy_hit_new(s, kw, from + i - left->len);
|
||||
kw->last += 1;
|
||||
if (!t) {
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -254,9 +239,8 @@ RZ_API int rz_search_deltakey_update(RzSearch *s, ut64 from, const ut8 *buf, int
|
|||
}
|
||||
}
|
||||
}
|
||||
i = s->overlap || !kw->count ? 0 : s->bckwrds ? from > kw->last ? from - kw->last : 0
|
||||
: from < kw->last ? kw->last - from
|
||||
: 0;
|
||||
i = s->overlap || !kw->count ? 0 : from < kw->last ? kw->last - from
|
||||
: 0;
|
||||
for (; i + kw->keyword_length < len; i++) {
|
||||
if ((ut8)(buf[i + 1] - buf[i]) == a[0]) {
|
||||
j = 1;
|
||||
|
|
@ -264,8 +248,8 @@ RZ_API int rz_search_deltakey_update(RzSearch *s, ut64 from, const ut8 *buf, int
|
|||
j++;
|
||||
}
|
||||
if (j == kw->keyword_length) {
|
||||
int t = rz_search_legacy_hit_new(s, kw, s->bckwrds ? from - kw->keyword_length - 1 - i : from + i);
|
||||
kw->last += s->bckwrds ? 0 : 1;
|
||||
int t = rz_search_legacy_hit_new(s, kw, from + i);
|
||||
kw->last += 1;
|
||||
if (!t) {
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -290,7 +274,7 @@ RZ_API int rz_search_deltakey_update(RzSearch *s, ut64 from, const ut8 *buf, int
|
|||
left->len = longest - 1;
|
||||
memcpy(left->data, buf + len - longest + 1, longest - 1);
|
||||
}
|
||||
left->end = s->bckwrds ? from - len : from + len;
|
||||
left->end = from + len;
|
||||
|
||||
return s->nhits - old_nhits;
|
||||
}
|
||||
|
|
@ -379,25 +363,15 @@ RZ_API int rz_search_mybinparse_update(RzSearch *s, ut64 from, const ut8 *buf, i
|
|||
s->data = left;
|
||||
left->len = 0;
|
||||
}
|
||||
if (s->bckwrds) {
|
||||
// XXX Change function signature from const ut8 * to ut8 *
|
||||
ut8 *i = (ut8 *)buf, *j = i + len;
|
||||
while (i < j) {
|
||||
ut8 t = *i;
|
||||
*i++ = *--j;
|
||||
*j = t;
|
||||
}
|
||||
}
|
||||
|
||||
ut64 len1 = left->len + RZ_MIN(longest - 1, len);
|
||||
memcpy(left->data + left->len, buf, len1 - left->len);
|
||||
rz_list_foreach (s->kws, iter, kw) {
|
||||
i = s->overlap || !kw->count ? 0 : s->bckwrds ? kw->last - from < left->len ? from + left->len - kw->last : 0
|
||||
: from - kw->last < left->len ? kw->last + left->len - from
|
||||
: 0;
|
||||
i = s->overlap || !kw->count ? 0 : from - kw->last < left->len ? kw->last + left->len - from
|
||||
: 0;
|
||||
for (; i + kw->keyword_length <= len1 && i < left->len; i++) {
|
||||
if (brute_force_match(s, kw, left->data, i) != s->inverse) {
|
||||
int t = rz_search_legacy_hit_new(s, kw, s->bckwrds ? from - kw->keyword_length - i + left->len : from + i - left->len);
|
||||
int t = rz_search_legacy_hit_new(s, kw, from + i - left->len);
|
||||
if (!t) {
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -409,12 +383,11 @@ RZ_API int rz_search_mybinparse_update(RzSearch *s, ut64 from, const ut8 *buf, i
|
|||
}
|
||||
}
|
||||
}
|
||||
i = s->overlap || !kw->count ? 0 : s->bckwrds ? from > kw->last ? from - kw->last : 0
|
||||
: from < kw->last ? kw->last - from
|
||||
: 0;
|
||||
i = s->overlap || !kw->count ? 0 : from < kw->last ? kw->last - from
|
||||
: 0;
|
||||
for (; i + kw->keyword_length <= len; i++) {
|
||||
if (brute_force_match(s, kw, buf, i) != s->inverse) {
|
||||
int t = rz_search_legacy_hit_new(s, kw, s->bckwrds ? from - kw->keyword_length - i : from + i);
|
||||
int t = rz_search_legacy_hit_new(s, kw, from + i);
|
||||
if (!t) {
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -438,7 +411,7 @@ RZ_API int rz_search_mybinparse_update(RzSearch *s, ut64 from, const ut8 *buf, i
|
|||
left->len = longest - 1;
|
||||
memcpy(left->data, buf + len - longest + 1, longest - 1);
|
||||
}
|
||||
left->end = s->bckwrds ? from - len : from + len;
|
||||
left->end = from + len;
|
||||
|
||||
return s->nhits - old_nhits;
|
||||
}
|
||||
|
|
@ -509,28 +482,6 @@ RZ_API int rz_search_kw_add(RzSearch *s, RzSearchKeyword *kw) {
|
|||
return true;
|
||||
}
|
||||
|
||||
// Reverse bin_keyword & bin_binmask for backward search
|
||||
RZ_API void rz_search_string_prepare_backward(RzSearch *s) {
|
||||
RzListIter *iter;
|
||||
RzSearchKeyword *kw;
|
||||
// Precondition: !kw->binmask_length || kw->keyword_length % kw->binmask_length == 0
|
||||
rz_list_foreach (s->kws, iter, kw) {
|
||||
ut8 *i = kw->bin_keyword, *j = kw->bin_keyword + kw->keyword_length;
|
||||
while (i < j) {
|
||||
ut8 t = *i;
|
||||
*i++ = *--j;
|
||||
*j = t;
|
||||
}
|
||||
i = kw->bin_binmask;
|
||||
j = kw->bin_binmask + kw->binmask_length;
|
||||
while (i < j) {
|
||||
ut8 t = *i;
|
||||
*i++ = *--j;
|
||||
*j = t;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RZ_API void rz_search_reset(RzSearch *s, int mode) {
|
||||
s->nhits = 0;
|
||||
if (!rz_search_set_mode(s, mode)) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue