mirror of
https://github.com/radareorg/radare2.git
synced 2024-11-28 15:41:38 +00:00
Use RCore.help instead of eprintf in more commands under aa ##shell
This commit is contained in:
parent
fe219fc0c7
commit
59bfb51cec
@ -310,3 +310,4 @@ You can't sleep now there are monsters nearby
|
||||
Every journey begins with a choice
|
||||
Do 'r2pm -i r2premium; echo "e cfg.fortunes.type = nsfw" >> ~/.radare2rc' for a even more fun with r2
|
||||
pneumonic
|
||||
Click below to prove you are not a bot
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* radare2 - LGPL - Copyright 2019-2021 - pancake */
|
||||
/* radare2 - LGPL - Copyright 2019-2022 - pancake */
|
||||
|
||||
/* This code has been written by pancake which has been based on Alvaro's
|
||||
* r2pipe-python script which was based on FireEye script for IDA Pro.
|
||||
@ -6,6 +6,8 @@
|
||||
* https://www.fireeye.com/blog/threat-research/2017/03/introduction_to_reve.html
|
||||
*/
|
||||
|
||||
#define R_LOG_ORIGIN "anal.objc"
|
||||
|
||||
#include <r_core.h>
|
||||
|
||||
|
||||
@ -20,7 +22,6 @@ typedef struct {
|
||||
RBinSection *_data;
|
||||
} RCoreObjc;
|
||||
|
||||
|
||||
const size_t objc2ClassSize = 0x28;
|
||||
const size_t objc2ClassInfoOffs = 0x20;
|
||||
const size_t objc2ClassMethSize = 0x18;
|
||||
@ -142,13 +143,13 @@ static bool objc_build_refs(RCoreObjc *objc) {
|
||||
maxsize = R_MIN (maxsize, objc->file_size);
|
||||
if (ss_const > maxsize) {
|
||||
if (objc->core->bin->verbose) {
|
||||
eprintf ("aao: Truncating ss_const from %u to %u\n", (int)ss_const, (int)maxsize);
|
||||
R_LOG_WARN ("aao: Truncating ss_const from %u to %u", (int)ss_const, (int)maxsize);
|
||||
}
|
||||
ss_const = maxsize;
|
||||
}
|
||||
if (ss_selrefs > maxsize) {
|
||||
if (objc->core->bin->verbose) {
|
||||
eprintf ("aao: Truncating ss_selrefs from %u to %u\n", (int)ss_selrefs, (int)maxsize);
|
||||
R_LOG_WARN ("aao: Truncating ss_selrefs from %u to %u", (int)ss_selrefs, (int)maxsize);
|
||||
}
|
||||
ss_selrefs = maxsize;
|
||||
}
|
||||
@ -158,7 +159,7 @@ static bool objc_build_refs(RCoreObjc *objc) {
|
||||
}
|
||||
const size_t word_size = objc->word_size; // assuming 8 because of the read_le64
|
||||
if (!r_io_read_at (objc->core->io, objc->_const->vaddr, buf, ss_const)) {
|
||||
eprintf ("aao: Cannot read the whole const section %u\n", (unsigned int)ss_const);
|
||||
R_LOG_WARN ("aao: Cannot read the whole const section %u", (unsigned int)ss_const);
|
||||
return false;
|
||||
}
|
||||
for (off = 0; off + word_size < ss_const && off + word_size < maxsize; off += word_size) {
|
||||
@ -169,7 +170,7 @@ static bool objc_build_refs(RCoreObjc *objc) {
|
||||
}
|
||||
}
|
||||
if (!r_io_read_at (objc->core->io, va_selrefs, buf, ss_selrefs)) {
|
||||
eprintf ("aao: Cannot read the whole selrefs section\n");
|
||||
R_LOG_WARN ("aao: Cannot read the whole selrefs section");
|
||||
return false;
|
||||
}
|
||||
for (off = 0; off + word_size < ss_selrefs && off + word_size < maxsize; off += word_size) {
|
||||
@ -273,7 +274,7 @@ static bool objc_find_refs(RCore *core) {
|
||||
ut64 delta = (objc2ClassMethSize * count);
|
||||
ut64 to = classMethodsVA + delta - 8;
|
||||
if (delta > objc->file_size) {
|
||||
eprintf ("Workaround: Corrupted objc data? checking next %"PFMT64x" !< %"PFMT64x"\n", classMethodsVA, to);
|
||||
R_LOG_WARN ("Workarounding malformed objc data. checking next %"PFMT64x" !< %"PFMT64x, classMethodsVA, to);
|
||||
count = (objc->_data->vsize / objc2ClassMethSize) - 1;
|
||||
delta = objc2ClassMethSize * count;
|
||||
to = classMethodsVA + delta;
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* radare - LGPL - Copyright 2009-2022 - pancake, nibble */
|
||||
|
||||
#include <r_types.h>
|
||||
#define R_LOG_ORIGIN "core.anal"
|
||||
|
||||
#include <r_list.h>
|
||||
#include <r_flag.h>
|
||||
#include <r_core.h>
|
||||
@ -8,8 +9,6 @@
|
||||
#include <ht_uu.h>
|
||||
#include <r_util/r_graph_drawable.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
HEAPTYPE (ut64);
|
||||
|
||||
static R_TH_LOCAL RCore *mycore = NULL;
|
||||
@ -759,7 +758,7 @@ static bool __core_anal_fcn(RCore *core, ut64 at, ut64 from, int reftype, int de
|
||||
const char *cc = r_anal_cc_default (core->anal);
|
||||
if (!cc) {
|
||||
if (r_anal_cc_once (core->anal)) {
|
||||
eprintf ("Warning: set your favourite calling convention in `e anal.cc=?`\n");
|
||||
R_LOG_WARN ("set your favourite calling convention in `e anal.cc=?`");
|
||||
}
|
||||
cc = "reg";
|
||||
}
|
||||
@ -1663,7 +1662,7 @@ static int core_anal_graph_construct_nodes(RCore *core, RAnalFunction *fcn, int
|
||||
}
|
||||
free (buf);
|
||||
} else {
|
||||
eprintf ("cannot allocate %"PFMT64u" byte(s)\n", bbi->size);
|
||||
R_LOG_ERROR ("cannot allocate %"PFMT64u" byte(s)", bbi->size);
|
||||
}
|
||||
pj_end (pj);
|
||||
pj_end (pj);
|
||||
@ -1831,7 +1830,6 @@ static int core_anal_graph_nodes(RCore *core, RAnalFunction *fcn, int opts, PJ *
|
||||
char *pal_traced = palColorFor ("graph.traced");
|
||||
char *pal_box4 = palColorFor ("graph.box4");
|
||||
if (!fcn || !fcn->bbs) {
|
||||
eprintf ("No fcn\n");
|
||||
free (pal_jump);
|
||||
free (pal_fail);
|
||||
free (pal_trfa);
|
||||
@ -1903,7 +1901,6 @@ R_API bool r_core_anal_bb_seek(RCore *core, ut64 addr) {
|
||||
|
||||
R_API int r_core_anal_esil_fcn(RCore *core, ut64 at, ut64 from, int reftype, int depth) {
|
||||
const char *esil;
|
||||
eprintf ("TODO\n");
|
||||
while (1) {
|
||||
// TODO: Implement the proper logic for doing esil analysis
|
||||
RAnalOp *op = r_core_anal_op (core, at, R_ANAL_OP_MASK_ESIL);
|
||||
@ -1945,15 +1942,11 @@ static bool is_skippable_addr(RCore *core, ut64 addr) {
|
||||
* reference to that fcn */
|
||||
R_API bool r_core_anal_fcn(RCore *core, ut64 at, ut64 from, int reftype, int depth) {
|
||||
if (depth < 0) {
|
||||
if (core->anal->verbose) {
|
||||
eprintf ("Message: Early deepness at 0x%08"PFMT64x"\n", at);
|
||||
}
|
||||
R_LOG_DEBUG ("Early deepness at 0x%08"PFMT64x, at);
|
||||
return false;
|
||||
}
|
||||
if (from == UT64_MAX && is_skippable_addr (core, at)) {
|
||||
if (core->anal->verbose) {
|
||||
eprintf ("Message: Invalid address for function 0x%08"PFMT64x"\n", at);
|
||||
}
|
||||
R_LOG_DEBUG ("Message: Invalid address for function 0x%08"PFMT64x, at);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1966,9 +1959,7 @@ R_API bool r_core_anal_fcn(RCore *core, ut64 at, ut64 from, int reftype, int dep
|
||||
|
||||
if (core->io->va) {
|
||||
if (!r_io_is_valid_offset (core->io, at, !core->anal->opt.noncode)) {
|
||||
if (core->anal->verbose) {
|
||||
R_LOG_WARN ("Address not mapped or not executable at 0x%08"PFMT64x, at);
|
||||
}
|
||||
R_LOG_DEBUG ("Address not mapped or not executable at 0x%08"PFMT64x, at);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1981,7 +1972,7 @@ R_API bool r_core_anal_fcn(RCore *core, ut64 at, ut64 from, int reftype, int dep
|
||||
}
|
||||
|
||||
if ((from != UT64_MAX && !at) || at == UT64_MAX) {
|
||||
eprintf ("Invalid address from 0x%08"PFMT64x"\n", from);
|
||||
R_LOG_WARN ("Invalid address from 0x%08"PFMT64x, from);
|
||||
return false;
|
||||
}
|
||||
if (r_cons_is_breaked ()) {
|
||||
@ -2259,7 +2250,7 @@ R_API void r_core_anal_datarefs(RCore *core, ut64 addr) {
|
||||
}
|
||||
r_list_free (refs);
|
||||
} else {
|
||||
eprintf ("Not in a function. Use 'df' to define it.\n");
|
||||
R_LOG_ERROR ("Not in a function. Use 'df' to define it");
|
||||
}
|
||||
}
|
||||
|
||||
@ -2280,7 +2271,7 @@ R_API void r_core_anal_coderefs(RCore *core, ut64 addr) {
|
||||
}
|
||||
r_list_free (refs);
|
||||
} else {
|
||||
eprintf("Not in a function. Use 'df' to define it.\n");
|
||||
R_LOG_ERROR ("Not in a function. Use 'df' to define it");
|
||||
}
|
||||
}
|
||||
|
||||
@ -3274,7 +3265,7 @@ R_API int r_core_anal_fcn_list(RCore *core, const char *input, const char *rad)
|
||||
if (*rad == '.') {
|
||||
RList *fcns = r_anal_get_functions_in (core->anal, core->offset);
|
||||
if (!fcns || r_list_empty (fcns)) {
|
||||
eprintf ("No functions at current address.\n");
|
||||
R_LOG_ERROR ("No functions at current address");
|
||||
r_list_free (fcns);
|
||||
return -1;
|
||||
}
|
||||
@ -3576,7 +3567,7 @@ static bool anal_path_exists(RCore *core, ut64 from, ut64 to, RList *bbs, int de
|
||||
RAnalRef *refi;
|
||||
|
||||
if (depth < 0) {
|
||||
eprintf ("going too deep\n");
|
||||
R_LOG_ERROR ("going too deep");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -3869,7 +3860,7 @@ R_API int r_core_anal_search(RCore *core, ut64 from, ut64 to, ut64 ref, int mode
|
||||
// XXX must read bytes correctly
|
||||
do_bckwrd_srch = bckwrds = core->search->bckwrds;
|
||||
if (!ref) {
|
||||
eprintf ("Null reference search is not supported\n");
|
||||
R_LOG_ERROR ("Null reference search is not supported");
|
||||
free (buf);
|
||||
return -1;
|
||||
}
|
||||
@ -5192,10 +5183,7 @@ R_API void r_core_anal_esil(RCore *core, const char *str, const char *target) {
|
||||
|
||||
mycore = core;
|
||||
if (!strcmp (str, "?")) {
|
||||
eprintf ("Usage: aae[f] [len] [addr] - analyze refs in function, section or len bytes with esil\n");
|
||||
eprintf (" aae $SS @ $S - analyze the whole section\n");
|
||||
eprintf (" aae $SS str.Hello @ $S - find references for str.Hellow\n");
|
||||
eprintf (" aaef - analyze functions discovered with esil\n");
|
||||
R_LOG_INFO ("should never happen");
|
||||
return;
|
||||
}
|
||||
#define CHECKREF(x) ((refptr && (x) == refptr) || !refptr)
|
||||
|
@ -162,6 +162,7 @@ static const char *help_msg_aa[] = {
|
||||
"aab", "", "abb across bin.sections.rx",
|
||||
"aac", " [len]", "analyze function calls (af @@ `pi len~call[1]`)",
|
||||
"aac*", " [len]", "flag function calls without performing a complete analysis",
|
||||
"aaci", "", "flag import xrefs only",
|
||||
"aad", " [len]", "analyze data references to code",
|
||||
"aae", " [len] ([addr])", "analyze references with ESIL (optionally to address)",
|
||||
"aaef", "", "analyze references with ESIL in all functions",
|
||||
@ -169,6 +170,7 @@ static const char *help_msg_aa[] = {
|
||||
"aaF", " [sym*]", "set anal.in=block for all the spaces between flags matching glob",
|
||||
"aaFa", " [sym*]", "same as aaF but uses af/a2f instead of af+/afb+ (slower but more accurate)",
|
||||
"aai", "[j]", "show info of all analysis parameters",
|
||||
"aaj", " ", "analyze all jumps",
|
||||
"aan", "[?][gr]", "autoname functions (aang = golang, aanr = noreturn propagation)",
|
||||
"aao", "", "analyze all objc references",
|
||||
"aap", "", "find and analyze function preludes",
|
||||
@ -6643,12 +6645,12 @@ static void r_anal_aefa(RCore *core, const char *arg) {
|
||||
if (fcn) {
|
||||
from = fcn->addr;
|
||||
} else {
|
||||
R_LOG_INFO ("Usage: aefa [from] # if no from address is given, uses fcn.addr\n");
|
||||
R_LOG_INFO ("Usage: aefa [from] # if no from address is given, uses fcn.addr");
|
||||
return;
|
||||
}
|
||||
}
|
||||
R_LOG_INFO ("Emulate from 0x%08"PFMT64x" to 0x%08"PFMT64x"\n", from, to);
|
||||
R_LOG_INFO ("Resolve call args for 0x%08"PFMT64x"\n", to);
|
||||
R_LOG_INFO ("Emulate from 0x%08"PFMT64x" to 0x%08"PFMT64x, from, to);
|
||||
R_LOG_INFO ("Resolve call args for 0x%08"PFMT64x, to);
|
||||
|
||||
// emulate
|
||||
// XXX do not use commands, here, just use the api
|
||||
@ -7089,7 +7091,7 @@ static void cmd_anal_esil(RCore *core, const char *input, bool verbose) {
|
||||
r_cons_printf ("trap: %d\n", core->anal->esil->trap);
|
||||
r_cons_printf ("trap-code: %d\n", core->anal->esil->trap_code);
|
||||
} else {
|
||||
R_LOG_INFO ("esil vm not initialized. run `aei`\n");
|
||||
R_LOG_WARN ("esil vm is not initialized. Please run `aei`");
|
||||
}
|
||||
break;
|
||||
case ' ':
|
||||
@ -7280,7 +7282,7 @@ static void cmd_anal_esil(RCore *core, const char *input, bool verbose) {
|
||||
r_anal_op_free (op);
|
||||
op = NULL;
|
||||
if (core->anal->esil->trap || core->anal->esil->trap_code) {
|
||||
R_LOG_INFO ("esil trap '%s' (%d) at 0x%08" PFMT64x "\n",
|
||||
R_LOG_INFO ("esil trap '%s' (%d) at 0x%08" PFMT64x,
|
||||
r_anal_esil_trapstr (core->anal->esil->trap),
|
||||
core->anal->esil->trap_code, addr);
|
||||
break;
|
||||
@ -8024,7 +8026,7 @@ static void cmd_anal_blocks(RCore *core, const char *input) {
|
||||
} else if (to - from > UT32_MAX) {
|
||||
R_LOG_WARN ("Skipping huge range");
|
||||
} else {
|
||||
R_LOG_DEBUG ("abb 0x%08"PFMT64x" @ 0x%08"PFMT64x"\n", (to - from), from);
|
||||
R_LOG_DEBUG ("abb 0x%08"PFMT64x" @ 0x%08"PFMT64x, (to - from), from);
|
||||
r_core_cmdf (core, "abb 0x%08"PFMT64x" @ 0x%08"PFMT64x, (to - from), from);
|
||||
}
|
||||
}
|
||||
@ -11140,7 +11142,7 @@ static int cmd_anal_all(RCore *core, const char *input) {
|
||||
cmd_anal_calls (core, input + 1, input[2] == '*', true);
|
||||
break;
|
||||
case '?': // "aac?"
|
||||
eprintf ("Usage: aac, aac* or aaci (imports xrefs only)\n");
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aac", false);
|
||||
break;
|
||||
default: // "aac"
|
||||
cmd_anal_calls (core, input + 1, false, false);
|
||||
@ -11148,10 +11150,18 @@ static int cmd_anal_all(RCore *core, const char *input) {
|
||||
}
|
||||
break;
|
||||
case 'j': // "aaj"
|
||||
cmd_anal_jumps (core, input + 1);
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aaj", true);
|
||||
} else {
|
||||
cmd_anal_jumps (core, input + 1);
|
||||
}
|
||||
break;
|
||||
case 'd': // "aad"
|
||||
cmd_anal_aad (core, input);
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aad", true);
|
||||
} else {
|
||||
cmd_anal_aad (core, input);
|
||||
}
|
||||
break;
|
||||
case 'v': // "aav"
|
||||
if (strchr (input + 1, '?')) {
|
||||
@ -11161,21 +11171,41 @@ static int cmd_anal_all(RCore *core, const char *input) {
|
||||
}
|
||||
break;
|
||||
case 'w': // "aaw"
|
||||
cmd_anal_aaw (core, input);
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aaw", true);
|
||||
} else {
|
||||
cmd_anal_aaw (core, input);
|
||||
}
|
||||
break;
|
||||
case 'u': // "aau" - print areas not covered by functions
|
||||
r_core_anal_nofunclist (core, input + 1);
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aau", true);
|
||||
} else {
|
||||
r_core_anal_nofunclist (core, input + 1);
|
||||
}
|
||||
break;
|
||||
case 'i': // "aai"
|
||||
r_core_anal_info (core, input + 1);
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aai", true);
|
||||
} else {
|
||||
r_core_anal_info (core, input + 1);
|
||||
}
|
||||
break;
|
||||
case 's': // "aas"
|
||||
r_core_cmd0 (core, "af @@= `isq~[0]`");
|
||||
r_core_cmd0 (core, "af @@f:entry*");
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aas", true);
|
||||
} else {
|
||||
r_core_cmd0 (core, "af @@= `isq~[0]`");
|
||||
r_core_cmd0 (core, "af @@f:entry*");
|
||||
}
|
||||
break;
|
||||
case 'S': // "aaS"
|
||||
r_core_cmd0 (core, "af @@f:sym.*");
|
||||
r_core_cmd0 (core, "af @@f:entry*");
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aaS", true);
|
||||
} else {
|
||||
r_core_cmd0 (core, "af @@f:sym.*");
|
||||
r_core_cmd0 (core, "af @@f:entry*");
|
||||
}
|
||||
break;
|
||||
case 'F': // "aaF" "aaFa"
|
||||
if (!input[1] || input[1] == ' ' || input[1] == 'a') {
|
||||
@ -11201,8 +11231,7 @@ static int cmd_anal_all(RCore *core, const char *input) {
|
||||
break;
|
||||
case 'p': // "aap"
|
||||
if (input[1] == '?') {
|
||||
// TODO: accept parameters for ranges
|
||||
eprintf ("Usage: /aap ; find in memory for function preludes");
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aap", true);
|
||||
} else {
|
||||
r_core_search_preludes (core, true);
|
||||
}
|
||||
@ -11436,62 +11465,80 @@ static int cmd_anal_all(RCore *core, const char *input) {
|
||||
R_FREE (dh_orig);
|
||||
}
|
||||
break;
|
||||
case 't': { // "aat"
|
||||
char *off = input[1]? r_str_trim_dup (input + 2): NULL;
|
||||
RAnalFunction *fcn;
|
||||
RListIter *it;
|
||||
if (off && *off) {
|
||||
ut64 addr = r_num_math (NULL, off);
|
||||
fcn = r_anal_get_function_at (core->anal, core->offset);
|
||||
if (fcn) {
|
||||
r_core_link_stroff (core, fcn);
|
||||
} else {
|
||||
R_LOG_ERROR ("Cannot find function at %08" PFMT64x, addr);
|
||||
}
|
||||
case 't': // "aat"
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aat", true);
|
||||
} else {
|
||||
if (r_list_empty (core->anal->fcns)) {
|
||||
R_LOG_ERROR ("Couldn't find any functions");
|
||||
break;
|
||||
}
|
||||
r_list_foreach (core->anal->fcns, it, fcn) {
|
||||
if (r_cons_is_breaked ()) {
|
||||
char *off = input[1]? r_str_trim_dup (input + 2): NULL;
|
||||
RAnalFunction *fcn;
|
||||
RListIter *it;
|
||||
if (off && *off) {
|
||||
ut64 addr = r_num_math (NULL, off);
|
||||
fcn = r_anal_get_function_at (core->anal, core->offset);
|
||||
if (fcn) {
|
||||
r_core_link_stroff (core, fcn);
|
||||
} else {
|
||||
R_LOG_ERROR ("Cannot find function at %08" PFMT64x, addr);
|
||||
}
|
||||
} else {
|
||||
if (r_list_empty (core->anal->fcns)) {
|
||||
R_LOG_ERROR ("Couldn't find any functions");
|
||||
break;
|
||||
}
|
||||
r_core_link_stroff (core, fcn);
|
||||
r_list_foreach (core->anal->fcns, it, fcn) {
|
||||
if (r_cons_is_breaked ()) {
|
||||
break;
|
||||
}
|
||||
r_core_link_stroff (core, fcn);
|
||||
}
|
||||
}
|
||||
free (off);
|
||||
}
|
||||
free (off);
|
||||
break;
|
||||
}
|
||||
case 'T': // "aaT"
|
||||
cmd_anal_aftertraps (core, input + 1);
|
||||
break;
|
||||
case 'o': // "aao"
|
||||
cmd_anal_objc (core, input + 1, false);
|
||||
if (input[1] == '?') { // "aao?"
|
||||
r_core_cmd_help_match (core, help_msg_aa, "aao", true);
|
||||
} else {
|
||||
cmd_anal_objc (core, input + 1, false);
|
||||
}
|
||||
break;
|
||||
case 'e': // "aae"
|
||||
if (input[1] == 'f') { // "aaef"
|
||||
RListIter *it;
|
||||
RAnalFunction *fcn;
|
||||
ut64 cur_seek = core->offset;
|
||||
r_list_foreach (core->anal->fcns, it, fcn) {
|
||||
r_core_seek (core, fcn->addr, true);
|
||||
r_core_anal_esil (core, "f", NULL);
|
||||
// __anal_esil_function (core, fcn->addr);
|
||||
if (input[2] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aae, "aaef", true);
|
||||
} else {
|
||||
RListIter *it;
|
||||
RAnalFunction *fcn;
|
||||
ut64 cur_seek = core->offset;
|
||||
r_list_foreach (core->anal->fcns, it, fcn) {
|
||||
r_core_seek (core, fcn->addr, true);
|
||||
r_core_anal_esil (core, "f", NULL);
|
||||
// __anal_esil_function (core, fcn->addr);
|
||||
}
|
||||
r_core_seek (core, cur_seek, true);
|
||||
}
|
||||
r_core_seek (core, cur_seek, true);
|
||||
} else if (input[1] == '?') { // "aae?"
|
||||
r_core_cmd_help (core, help_msg_aae);
|
||||
} else if (input[1] == 'p') { // "aaep" // auto define all esil pins
|
||||
r_core_cmd0 (core, "aep ret0@@@i");
|
||||
r_core_cmd0 (core, "aepa@@@i");
|
||||
} else if (input[1] == ' ') {
|
||||
const char *len = (char *)input + 1;
|
||||
char *addr = strchr (input + 2, ' ');
|
||||
if (input[2] == '?') {
|
||||
r_core_cmd_help_match (core, help_msg_aae, "aaef", true);
|
||||
} else {
|
||||
r_core_cmd0 (core, "aep ret0@@@i");
|
||||
r_core_cmd0 (core, "aepa@@@i");
|
||||
}
|
||||
} else if (input[1] == ' ') { // "aae "
|
||||
char *arg = r_str_trim_dup (input + 1);
|
||||
const char *len = (char *)arg;
|
||||
char *addr = strchr (arg, ' ');
|
||||
if (addr) {
|
||||
*addr++ = 0;
|
||||
*addr = 0;
|
||||
addr = (char *)r_str_trim_head_ro (addr + 1);
|
||||
}
|
||||
r_core_anal_esil (core, len, addr);
|
||||
free (arg);
|
||||
} else {
|
||||
ut64 at = core->offset;
|
||||
RIOMap *map;
|
||||
@ -11526,7 +11573,11 @@ static int cmd_anal_all(RCore *core, const char *input) {
|
||||
}
|
||||
break;
|
||||
case 'r':
|
||||
(void)r_core_anal_refs (core, input + 1);
|
||||
if (input[1] == '?') {
|
||||
r_core_cmd_help (core, help_msg_aar);
|
||||
} else {
|
||||
(void)r_core_anal_refs (core, input + 1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
r_core_cmd_help (core, help_msg_aa);
|
||||
@ -12198,7 +12249,7 @@ static void cmd_anal_aC(RCore *core, const char *input) {
|
||||
|
||||
static bool core_anal_abf(RCore *core, const char* input) {
|
||||
if (strchr (input, '?')) {
|
||||
eprintf ("Usage: abf ([addr]) # list incoming/from basic blocks\n");
|
||||
r_core_cmd_help_match (core, help_msg_ab, "abf", true);
|
||||
return false;
|
||||
}
|
||||
ut64 addr = r_num_math (core->num, input);
|
||||
|
@ -4059,7 +4059,7 @@ static void cmd_print_bars(RCore *core, const char *input) {
|
||||
}
|
||||
blocksize = (blocksize > 0)? (totalsize / blocksize): (core->blocksize);
|
||||
if (blocksize < 1) {
|
||||
R_LOG_ERROR ("Invalid block size: %d\n", (int)blocksize);
|
||||
R_LOG_ERROR ("Invalid block size: %d", (int)blocksize);
|
||||
goto beach;
|
||||
}
|
||||
if (!r_config_get_b (core->config, "cfg.debug")) {
|
||||
@ -4079,7 +4079,7 @@ static void cmd_print_bars(RCore *core, const char *input) {
|
||||
} else {
|
||||
blocksize = totalsize / nblocks;
|
||||
if (blocksize < 1) {
|
||||
R_LOG_ERROR ("Invalid block size: %d\n", (int)blocksize);
|
||||
R_LOG_ERROR ("Invalid block size: %d", (int)blocksize);
|
||||
goto beach;
|
||||
}
|
||||
}
|
||||
@ -5658,7 +5658,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
/* hijack here for now, idk how to more cleanly integrate it */
|
||||
return cmd_pdu (core, input + 2);
|
||||
}
|
||||
if (!strncmp (input, "ushd", 4)) { // "pushd"
|
||||
if (r_str_startswith (input, "ushd")) { // "pushd"
|
||||
bool halp = true;
|
||||
const char *arg = strchr (input, ' ');
|
||||
if (arg) {
|
||||
@ -5678,7 +5678,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (!strncmp (input, "opd", 3)) { // "popd"
|
||||
if (r_str_startswith (input, "opd")) { // "popd"
|
||||
bool all = strstr (input, "-a");
|
||||
bool halp = strstr (input, "-h");
|
||||
if (halp) {
|
||||
@ -5691,7 +5691,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
if (suc) {
|
||||
r_core_return_value (core, 0);
|
||||
} else {
|
||||
eprintf ("Cannot popd\n");
|
||||
R_LOG_ERROR ("Nothing was pushd. Cannot popd");
|
||||
r_core_return_value (core, 1);
|
||||
}
|
||||
}
|
||||
@ -5756,8 +5756,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
i = 0;
|
||||
}
|
||||
if (i && l > i) {
|
||||
eprintf ("This block size is too big (0x%"PFMT64x
|
||||
" < 0x%" PFMT64x "). Did you mean 'p%c @ %s' instead?\n",
|
||||
R_LOG_ERROR ("Block size is too large (0x%"PFMT64x " < 0x%" PFMT64x "). Did you mean 'p%c @ %s' instead?",
|
||||
n, l, *input, *input? r_str_trim_head_ro (input + 1): "");
|
||||
goto beach;
|
||||
}
|
||||
@ -5765,8 +5764,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
if (input[0] == 'x' || input[0] == 'D') {
|
||||
if (l > 0 && tmpseek == UT64_MAX) {
|
||||
if (!r_core_block_size (core, l)) {
|
||||
eprintf ("This block size is too big. Did you mean 'p%c @ %s' instead?\n",
|
||||
*input, input + 2);
|
||||
R_LOG_ERROR ("This block size is too big. Did you mean 'p%c @ %s' instead?", *input, input + 2);
|
||||
goto beach;
|
||||
}
|
||||
}
|
||||
@ -5781,7 +5779,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
len = core->blocksize;
|
||||
}
|
||||
} else {
|
||||
eprintf ("p: Cannot find function at 0x%08"PFMT64x "\n", core->offset);
|
||||
R_LOG_ERROR ("Cannot find function at 0x%08"PFMT64x, core->offset);
|
||||
r_core_return_value (core, 0);
|
||||
goto beach;
|
||||
}
|
||||
@ -5827,14 +5825,14 @@ static int cmd_print(void *data, const char *input) {
|
||||
free (res);
|
||||
*/
|
||||
} else {
|
||||
eprintf ("Cannot allocate %d\n", (int)(core->offset));
|
||||
R_LOG_ERROR ("Cannot allocate %d", (int)(core->offset));
|
||||
}
|
||||
} else {
|
||||
r_core_cmdf (core, "pj %"PFMT64u" @ 0", core->offset);
|
||||
}
|
||||
} else {
|
||||
if (core->blocksize < 4 || !memcmp (core->block, "\xff\xff\xff\xff", 4)) {
|
||||
eprintf ("Cannot read\n");
|
||||
R_LOG_ERROR ("Cannot read");
|
||||
} else {
|
||||
char *res = r_print_json_indent ((const char *)core->block, true, " ", NULL);
|
||||
r_cons_printf ("%s\n", res);
|
||||
@ -5900,11 +5898,11 @@ static int cmd_print(void *data, const char *input) {
|
||||
const char *str = R_STRBUF_SAFEGET (&aop.esil);
|
||||
r_cons_println (str);
|
||||
} else {
|
||||
eprintf ("Cannot decode instruction\n");
|
||||
R_LOG_ERROR ("Cannot decode instruction");
|
||||
break;
|
||||
}
|
||||
if (aop.size < 1) {
|
||||
eprintf ("Cannot decode instruction\n");
|
||||
R_LOG_ERROR ("Cannot decode instruction");
|
||||
break;
|
||||
}
|
||||
printed += aop.size;
|
||||
@ -5937,11 +5935,11 @@ static int cmd_print(void *data, const char *input) {
|
||||
const char *str = R_STRBUF_SAFEGET (&aop.esil);
|
||||
r_cons_println (str);
|
||||
} else {
|
||||
eprintf ("Cannot decode instruction\n");
|
||||
R_LOG_ERROR ("Cannot decode instruction");
|
||||
break;
|
||||
}
|
||||
if (aop.size < 1) {
|
||||
eprintf ("Cannot decode instruction\n");
|
||||
R_LOG_ERROR ("Cannot decode instruction");
|
||||
break;
|
||||
}
|
||||
printed += aop.size;
|
||||
@ -6155,7 +6153,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
|
||||
int mbs = core->blocksize_max;
|
||||
if (core->blocksize_max < use_blocksize && (int) use_blocksize < -mbs) {
|
||||
eprintf ("This block size is too big (%"PFMT64u "<%"PFMT64u "). Did you mean 'p%c @ 0x%08"PFMT64x "' instead?\n",
|
||||
R_LOG_ERROR ("Block size is too large (%"PFMT64u "<%"PFMT64u "). Did you mean 'p%c @ 0x%08"PFMT64x "' instead?",
|
||||
(ut64) core->blocksize_max, (ut64) use_blocksize, input[0], (ut64) use_blocksize);
|
||||
goto beach;
|
||||
} else if (core->blocksize_max < use_blocksize && (int) use_blocksize > -mbs) {
|
||||
@ -6292,7 +6290,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
if (f) {
|
||||
func_walk_blocks (core, f, input[2], 'D', input[2] == '.');
|
||||
} else {
|
||||
eprintf ("Cannot find function at 0x%08"PFMT64x "\n", core->offset);
|
||||
R_LOG_ERROR ("Cannot find function at 0x%08"PFMT64x, core->offset);
|
||||
}
|
||||
pd_result = true;
|
||||
}
|
||||
@ -6329,7 +6327,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
pd_result = 0;
|
||||
}
|
||||
} else {
|
||||
eprintf ("Cannot find function at 0x%08"PFMT64x "\n", core->offset);
|
||||
R_LOG_ERROR ("Cannot find function at 0x%08"PFMT64x, core->offset);
|
||||
r_core_return_value (core, 0);
|
||||
}
|
||||
}
|
||||
@ -6396,7 +6394,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
r_core_print_disasm_json (core, b->addr, buf, b->size, 0, pj);
|
||||
free (buf);
|
||||
} else {
|
||||
eprintf ("Cannot allocate %"PFMT64u" byte(s)\n", b->size);
|
||||
R_LOG_ERROR ("Cannot allocate %"PFMT64u" byte(s)", b->size);
|
||||
}
|
||||
}
|
||||
pj_end (pj);
|
||||
@ -6409,7 +6407,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
ut64 linearsz = r_anal_function_linear_size (f);
|
||||
ut64 realsz = r_anal_function_realsize (f);
|
||||
if (realsz + 4096 < linearsz) {
|
||||
eprintf ("Linear size differs too much from the bbsum, please use pdr instead.\n");
|
||||
R_LOG_ERROR ("Linear size differs too much from the bbsum, please use pdr instead");
|
||||
} else {
|
||||
ut64 at = f->addr; // TODO: should be min from r_anal_function_get_range()?
|
||||
ut64 sz = R_MAX (linearsz, realsz);
|
||||
@ -6424,7 +6422,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
}
|
||||
pd_result = 0;
|
||||
} else {
|
||||
eprintf ("pdf: Cannot find function at 0x%08"PFMT64x "\n", core->offset);
|
||||
R_LOG_ERROR ("pdf: Cannot find function at 0x%08"PFMT64x, core->offset);
|
||||
processed_cmd = true;
|
||||
r_core_return_value (core, 0);
|
||||
}
|
||||
@ -6506,7 +6504,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
case ' ':
|
||||
break;
|
||||
default:
|
||||
eprintf ("Invalid pd subcommand.\n");
|
||||
R_LOG_ERROR ("Invalid pd subcommand");
|
||||
return 0;
|
||||
}
|
||||
if (formatted_json) {
|
||||
@ -6546,7 +6544,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
if (bs1 > bs) {
|
||||
ut8 *tmpblock = realloc (block1, bs1);
|
||||
if (!tmpblock) {
|
||||
eprintf ("Memory reallocation failed.\n");
|
||||
R_LOG_ERROR ("Memory reallocation failed");
|
||||
free (block1);
|
||||
break;
|
||||
}
|
||||
@ -6573,7 +6571,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
if (*input == 'D' && use_blocksize > 0) {
|
||||
l = use_blocksize;
|
||||
if (l > R_CORE_MAX_DISASM) { // pD
|
||||
eprintf ("Block size too big\n");
|
||||
R_LOG_ERROR ("Block size too big");
|
||||
return 1;
|
||||
}
|
||||
block1 = malloc (addrbytes * l);
|
||||
@ -6585,7 +6583,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
NULL, NULL);
|
||||
r_core_return_value (core, dislen);
|
||||
} else {
|
||||
eprintf ("Cannot allocate %" PFMT64d " byte(s)\n", addrbytes * l);
|
||||
R_LOG_ERROR ("Cannot allocate %" PFMT64d " byte(s)", addrbytes * l);
|
||||
}
|
||||
} else {
|
||||
ut8 *buf = core->block;
|
||||
@ -7039,7 +7037,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
r_print_bytes (core->print, obuf + i, left, "%02x");
|
||||
}
|
||||
} else {
|
||||
eprintf ("Invalid input size %d\n", olen);
|
||||
R_LOG_ERROR ("Invalid input size %d", olen);
|
||||
}
|
||||
free (dst);
|
||||
}
|
||||
@ -7115,7 +7113,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
} else if (input[1] == ' ') {
|
||||
char *data = r_file_slurp (input + 2, NULL);
|
||||
if (!data) {
|
||||
eprintf ("Could not open '%s'.\n", input + 2);
|
||||
R_LOG_ERROR ("Could not open '%s'", input + 2);
|
||||
break;
|
||||
}
|
||||
char *res = r_print_stereogram (data, 78, 20);
|
||||
@ -7440,7 +7438,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
cmd_pxr (core, len, mode, wordsize, mode? strchr (input, mode): NULL);
|
||||
break;
|
||||
default:
|
||||
eprintf ("Invalid word size. Use 1, 2, 4 or 8.\n");
|
||||
R_LOG_ERROR ("Invalid word size. Use 1, 2, 4 or 8");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -7714,7 +7712,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
if (r_base64_decode (buf, (const char *) block, len)) {
|
||||
r_cons_println ((const char *) buf);
|
||||
} else {
|
||||
eprintf ("r_base64_decode: invalid stream\n");
|
||||
R_LOG_ERROR ("r_base64_decode: invalid stream");
|
||||
}
|
||||
break;
|
||||
case 'e': // "p6e"
|
||||
@ -7836,7 +7834,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
}
|
||||
break;
|
||||
case 'n': // easter
|
||||
eprintf ("easter egg license has expired\n");
|
||||
R_LOG_ERROR ("easter egg license has expired");
|
||||
break;
|
||||
case 't': // "pt"
|
||||
switch (input[1]) {
|
||||
@ -7851,7 +7849,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
case '\0':
|
||||
// len must be multiple of 4 since r_mem_copyendian move data in fours - sizeof (ut32)
|
||||
if (len < sizeof (ut32)) {
|
||||
eprintf ("You should change the block size: b %d\n", (int) sizeof (ut32));
|
||||
R_LOG_WARN ("You should change the block size: b %d", (int) sizeof (ut32));
|
||||
}
|
||||
if (len % sizeof (ut32)) {
|
||||
len = len - (len % sizeof (ut32));
|
||||
@ -7863,7 +7861,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
case 'h': // "pth"
|
||||
// len must be multiple of 4 since r_mem_copyendian move data in fours - sizeof (ut32)
|
||||
if (len < sizeof (ut32)) {
|
||||
R_LOG_WARN ("Change the block size: b %d\n", (int) sizeof (ut32));
|
||||
R_LOG_WARN ("Change the block size: b %d", (int) sizeof (ut32));
|
||||
}
|
||||
if (len % sizeof (ut32)) {
|
||||
len = len - (len % sizeof (ut32));
|
||||
@ -7876,7 +7874,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
// len must be multiple of 4 since r_print_date_dos read buf+3
|
||||
// if block size is 1 or 5 for example it reads beyond the buffer
|
||||
if (len < sizeof (ut32)) {
|
||||
R_LOG_WARN ("Change the block size: b %d\n", (int) sizeof (ut32));
|
||||
R_LOG_WARN ("Change the block size: b %d", (int) sizeof (ut32));
|
||||
}
|
||||
if (len % sizeof (ut32)) {
|
||||
len = len - (len % sizeof (ut32));
|
||||
@ -7887,7 +7885,7 @@ static int cmd_print(void *data, const char *input) {
|
||||
break;
|
||||
case 'n': // "ptn"
|
||||
if (len < sizeof (ut64)) {
|
||||
R_LOG_WARN ("Change the block size: b %d\n", (int) sizeof (ut64));
|
||||
R_LOG_WARN ("Change the block size: b %d", (int) sizeof (ut64));
|
||||
}
|
||||
if (len % sizeof (ut64)) {
|
||||
len = len - (len % sizeof (ut64));
|
||||
|
@ -304,7 +304,7 @@ R_API bool r_core_visual_esil(RCore *core, const char *input) {
|
||||
r_anal_esil_runword (esil, word);
|
||||
break;
|
||||
case 'S':
|
||||
eprintf ("esil step back :D\n");
|
||||
R_LOG_WARN ("TODO: esil step back :D");
|
||||
r_sys_usleep (500);
|
||||
break;
|
||||
case 'r':
|
||||
@ -1187,7 +1187,7 @@ static void *show_class(RCore *core, int mode, int *idx, RBinClass *_c, const ch
|
||||
case 'm':
|
||||
// show methods
|
||||
if (!_c) {
|
||||
eprintf ("No class selected.\n");
|
||||
R_LOG_WARN ("No class selected");
|
||||
return mur;
|
||||
}
|
||||
r_cons_printf ("[hjkl_/cfM]> methods of %s\n\n", _c->name);
|
||||
@ -1710,7 +1710,7 @@ R_API int r_core_visual_view_rop(RCore *core) {
|
||||
}
|
||||
// maybe store in RCore, so we can save it in project and use it outside visual
|
||||
|
||||
eprintf ("Searching ROP gadgets...\n");
|
||||
R_LOG_INFO ("Searching ROP gadgets");
|
||||
char *ropstr = r_core_cmd_strf (core, "\"/Rl %s\" @e:scr.color=0", line);
|
||||
RList *rops = r_str_split_list (ropstr, "\n", 0);
|
||||
int delta = 0;
|
||||
@ -2135,16 +2135,16 @@ R_API int r_core_visual_trackflags(RCore *core) {
|
||||
case 'd':
|
||||
r_flag_unset_name (core->flags, fs2);
|
||||
break;
|
||||
case 'e':
|
||||
case 'e': // "VTe"
|
||||
/* TODO: prompt for addr, size, name */
|
||||
eprintf ("TODO\n");
|
||||
R_LOG_WARN ("TODO: VTe. prompt for addr, size, name");
|
||||
r_sys_sleep (1);
|
||||
break;
|
||||
case '*':
|
||||
r_core_block_size (core, core->blocksize+16);
|
||||
r_core_block_size (core, core->blocksize + 16);
|
||||
break;
|
||||
case '/':
|
||||
r_core_block_size (core, core->blocksize-16);
|
||||
r_core_block_size (core, core->blocksize - 16);
|
||||
break;
|
||||
case '+':
|
||||
if (menu == 1) {
|
||||
@ -3090,7 +3090,7 @@ static ut64 var_variables_show(RCore* core, int idx, int *vindex, int show, int
|
||||
{
|
||||
RRegItem *r = r_reg_index_get (core->anal->reg, var->delta);
|
||||
if (!r) {
|
||||
eprintf ("Register not found\n");
|
||||
R_LOG_ERROR ("Register not found for %d var delta", var->delta);
|
||||
break;
|
||||
}
|
||||
r_cons_printf ("%sarg %s %s @ %s\n",
|
||||
@ -3775,7 +3775,7 @@ R_API void r_core_seek_next(RCore *core, const char *type) {
|
||||
next = core->offset + aop.size;
|
||||
found = true;
|
||||
} else {
|
||||
eprintf ("Invalid opcode\n");
|
||||
R_LOG_ERROR ("Invalid opcode");
|
||||
}
|
||||
} else if (strstr (type, "fun")) {
|
||||
RAnalFunction *fcni;
|
||||
@ -3805,7 +3805,7 @@ R_API void r_core_seek_previous(RCore *core, const char *type) {
|
||||
ut64 next = 0;
|
||||
bool found = false;
|
||||
if (strstr (type, "opc")) {
|
||||
eprintf ("TODO: r_core_seek_previous (opc)\n");
|
||||
R_LOG_WARN ("TODO: r_core_seek_previous (opc)");
|
||||
} else if (strstr (type, "fun")) {
|
||||
RAnalFunction *fcni;
|
||||
r_list_foreach (core->anal->fcns, iter, fcni) {
|
||||
@ -4118,7 +4118,7 @@ onemoretime:
|
||||
r_core_cmd0 (core, q);
|
||||
free (q);
|
||||
} else {
|
||||
eprintf ("Sorry. No flags or variables referenced here\n");
|
||||
R_LOG_INFO ("Sorry. No flags or variables referenced here");
|
||||
r_cons_any_key (NULL);
|
||||
}
|
||||
r_anal_op_fini (&op);
|
||||
@ -4138,7 +4138,7 @@ onemoretime:
|
||||
r_cons_show_cursor (false);
|
||||
}
|
||||
} else {
|
||||
eprintf ("Sorry. No flag here\n");
|
||||
R_LOG_INFO ("Sorry. No flag here");
|
||||
r_cons_any_key (NULL);
|
||||
}
|
||||
}
|
||||
@ -4158,7 +4158,7 @@ onemoretime:
|
||||
r_cons_show_cursor (false);
|
||||
}
|
||||
} else {
|
||||
eprintf ("Sorry. No flag here\n");
|
||||
R_LOG_INFO ("Sorry. No flag here");
|
||||
r_cons_any_key (NULL);
|
||||
}
|
||||
}
|
||||
@ -4185,7 +4185,7 @@ onemoretime:
|
||||
r_core_cmdf (core, "afm $$+$F @0x%08"PFMT64x, off);
|
||||
break;
|
||||
case 'k':
|
||||
eprintf ("TODO: merge up\n");
|
||||
R_LOG_INFO ("TODO: merge up");
|
||||
r_cons_any_key (NULL);
|
||||
break;
|
||||
// very weak and incomplete
|
||||
@ -4199,7 +4199,7 @@ onemoretime:
|
||||
r_core_cmdf (core, "?i zone name;fz `yp` @ 0x%08"PFMT64x, off);
|
||||
break;
|
||||
case 'X': // "VdX"
|
||||
eprintf ("Finding cross-references to 0x%08"PFMT64x" ...\n", off);
|
||||
R_LOG_INFO ("Finding cross-references to 0x%08"PFMT64x, off);
|
||||
r_core_cmdf (core, "./r 0x%08"PFMT64x" @ $S", off);
|
||||
break;
|
||||
case 'S':
|
||||
@ -4328,7 +4328,7 @@ onemoretime:
|
||||
N = strtoull (end_off, &endptr, 16);
|
||||
}
|
||||
if (!end_off || end_off == endptr) {
|
||||
eprintf ("Invalid numeric input\n");
|
||||
R_LOG_ERROR ("Invalid numeric input");
|
||||
r_cons_any_key (NULL);
|
||||
free (end_off);
|
||||
break;
|
||||
|
@ -21,7 +21,7 @@ Cannot chdir
|
||||
/dev
|
||||
/dev
|
||||
/
|
||||
Cannot popd
|
||||
ERROR: Nothing was pushd. Cannot popd
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user