Implement new commands: yl, yw, ywx, wz, and re-fix .q

This commit is contained in:
pancake 2016-03-31 05:42:37 +02:00
parent 4b72511f6a
commit d4d6b1e1ff
3 changed files with 38 additions and 3 deletions

View File

@ -290,6 +290,9 @@ static int cmd_yank(void *data, const char *input) {
case ' ':
r_core_yank (core, core->offset, r_num_math (core->num, input+1));
break;
case 'l':
core->num->value = core->yank_buf->length;
break;
case 'y':
while (input[1]==' ') input++;
n = input[1]? r_num_math (core->num, input+1): core->offset;
@ -301,6 +304,26 @@ static int cmd_yank(void *data, const char *input) {
case 'z':
r_core_yank_string (core, core->offset, r_num_math (core->num, input+1));
break;
case 'w':
switch (input[1]) {
case ' ':
r_core_yank_set (core, 0, input + 2, strlen (input + 2));
break;
case 'x':
if (input[2] == ' ') {
char *out = strdup (input + 3);
int len = r_hex_str2bin (input+3, out);
if (len> 0) {
r_core_yank_set (core, 0, out, len);
} else {
eprintf ("Invalid length\n");
}
free (out);
} else eprintf ("Usage: ywx [hexpairs]\n");
// r_core_yank_write_hex (core, input + 2);
break;
}
break;
case 'p':
r_core_yank_cat (core, r_num_math (core->num, input+1));
break;
@ -2194,7 +2217,7 @@ R_API int r_core_cmd_lines(RCore *core, const char *lines) {
r = r_core_cmd (core, data, 0);
if (r < 0) { //== -1) {
data = nl+1;
ret = r; //false;
ret = -1; //r; //false;
break;
}
r_cons_flush ();
@ -2209,7 +2232,7 @@ R_API int r_core_cmd_lines(RCore *core, const char *lines) {
} while ((nl = strchr (data, '\n')));
r_cons_break_end ();
}
if (data && *data)
if (ret>=0 && data && *data)
r_core_cmd (core, data, 0);
free (odata);
return ret;

View File

@ -361,6 +361,7 @@ static int cmd_write(void *data, const char *input) {
"ww"," foobar","write wide string 'f\\x00o\\x00o\\x00b\\x00a\\x00r\\x00'",
"wx"," 9090","write two intel nops",
"wv"," eip+34","write 32-64 bit value",
"wz"," string","write zero terminated string (like w + \\x00",
NULL
};
@ -832,6 +833,17 @@ static int cmd_write(void *data, const char *input) {
WSEEK (core, len);
r_core_block_read (core, 0);
break;
case 'z':
/* write zero-terminated string */
len = r_str_unescape (str);
r_core_write_at (core, core->offset, (const ut8*)str + 1, len);
#if 0
r_io_use_desc (core->io, core->file->desc);
r_io_write_at (core->io, core->offset, (const ut8*)str, len);
#endif
WSEEK (core, len + 1);
r_core_block_read (core, 0);
break;
case 't': // "wt"
if (*str == '?' || *str == '\0') {
eprintf ("Usage: wt[a] file [size] write 'size' bytes in current block to file\n");

View File

@ -289,7 +289,7 @@ R_API int r_core_yank_cat_string (RCore *core, ut64 pos) {
int ybl = core->yank_buf->length;
if (ybl>0) {
if (pos < ybl) {
int len = r_str_nlen (core->yank_buf->buf + pos, ybl - pos);
int len = r_str_nlen ((const char *)core->yank_buf->buf + pos, ybl - pos);
r_cons_memcat ((const char*)core->yank_buf->buf + pos, len);
r_cons_newline ();
return true;