int main(int argc, char **argv) { RSearch *rs = r_search_new (R_SEARCH_REGEXP); r_search_set_callback (rs, &hit, (void*)buffer); r_search_kw_add (rs, /* search for /E.F/i */ r_search_keyword_new_str ("E.F", "i", NULL, 0)); r_search_begin (rs); printf ("Searching strings in '%s'\n", buffer); r_search_update_i (rs, 0LL, buffer, strlen ((const char*)buffer)); rs = r_search_free (rs); return 0; }
static int rafind_open_file(char *file) { const char *kw; RListIter *iter; bool last = false; int ret; if (!quiet) { printf ("File: %s\n", file); } if (identify) { char *cmd = r_str_newf ("r2 -e search.show=false -e search.maxhits=1 -nqcpm '%s'", file); r_sandbox_system (cmd, 1); free (cmd); return 0; } io = r_io_new (); fd = r_io_open_nomap (io, file, R_PERM_R, 0); if (!fd) { eprintf ("Cannot open file '%s'\n", file); return 1; } r_cons_new (); rs = r_search_new (mode); if (!rs) { return 1; } buf = calloc (1, bsize); if (!buf) { eprintf ("Cannot allocate %"PFMT64d" bytes\n", bsize); return 1; } rs->align = align; r_search_set_callback (rs, &hit, buf); if (to == -1) { to = r_io_size(io); } if (mode == R_SEARCH_STRING) { /* TODO: implement using api */ r_sys_cmdf ("rabin2 -qzzz '%s'", file); return 0; } if (mode == R_SEARCH_MAGIC) { char *tostr = (to && to != UT64_MAX)? r_str_newf ("-e search.to=%"PFMT64d, to): strdup (""); char *cmd = r_str_newf ("r2" " -e search.in=range" " -e search.align=%d" " -e search.from=%"PFMT64d " %s -qnc/m '%s'", align, from, tostr, file); r_sandbox_system (cmd, 1); free (cmd); free (tostr); return 0; } if (mode == R_SEARCH_ESIL) { char *cmd; r_list_foreach (keywords, iter, kw) { cmd = r_str_newf ("r2 -qc \"/E %s\" %s", kw, file); r_sandbox_system (cmd, 1); free (cmd); }