mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-03 04:05:06 +00:00
Implement new commands: yl, yw, ywx, wz, and re-fix .q
This commit is contained in:
parent
4b72511f6a
commit
d4d6b1e1ff
@ -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;
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user