Finish conversion of w commands to rzshell (#2412)

* Convert 'wz' to rzshell
* Remove 'wt' commands in favour of > operator
* Convert 'ww' command to rzshell
* Convert 'wm' command to rzshell
* Convert 'wd' command to rzshell
* Convert 'wu' command to rzshell
* Convert 'wo' commands to rzshell
* Fix 'w' tests
This commit is contained in:
Riccardo Schirone 2022-03-16 12:20:29 +01:00 committed by GitHub
parent f4f9471d62
commit d20b026ce2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 1745 additions and 1738 deletions

View file

@ -536,13 +536,13 @@ static void autocmplt_cmd_arg_zign_space(RzCore *core, RzLineNSCompletionResult
static void autocmplt_cmd_arg_choices(RzCore *core, RzLineNSCompletionResult *res, const char *s, size_t len, const RzCmdDescArg *arg) {
char **oc, **c;
oc = c = arg->choices_cb ? arg->choices_cb(core) : (char **)arg->choices;
for (c = oc; *c; c++) {
for (c = oc; c && *c; c++) {
if (!strncmp(*c, s, len)) {
rz_line_ns_completion_result_add(res, *c);
}
}
if (arg->choices_cb) {
for (c = oc; *c; c++) {
for (c = oc; c && *c; c++) {
free(*c);
}
free(oc);

View file

@ -92,221 +92,6 @@ RZ_API bool rz_core_dump(RzCore *core, const char *file, ut64 addr, ut64 size, i
return true;
}
static bool __endian_swap(ut8 *buf, ut32 blocksize, ut8 len) {
ut32 i;
ut16 v16;
ut32 v32;
ut64 v64;
if (len != 8 && len != 4 && len != 2 && len != 1) {
eprintf("Invalid word size. Use 1, 2, 4 or 8\n");
return false;
}
if (len == 1) {
return true;
}
for (i = 0; i < blocksize; i += len) {
switch (len) {
case 8:
v64 = rz_read_at_be64(buf, i);
rz_write_at_le64(buf, v64, i);
break;
case 4:
v32 = rz_read_at_be32(buf, i);
rz_write_at_le32(buf, v32, i);
break;
case 2:
v16 = rz_read_at_be16(buf, i);
rz_write_at_le16(buf, v16, i);
break;
}
}
return true;
}
RZ_API ut8 *rz_core_transform_op(RzCore *core, const char *arg, char op) {
int i, j;
ut64 len;
char *str = NULL;
ut8 *buf;
buf = (ut8 *)malloc(core->blocksize);
if (!buf) {
return NULL;
}
memcpy(buf, core->block, core->blocksize);
if (op != 'e') {
// fill key buffer either from arg or from clipboard
if (arg) { // parse arg for key
// rz_hex_str2bin() is guaranteed to output maximum half the
// input size, or 1 byte if there is just a single nibble.
str = (char *)malloc(strlen(arg) / 2 + 1);
if (!str) {
goto beach;
}
len = rz_hex_str2bin(arg, (ut8 *)str);
// Output is invalid if there was just a single nibble,
// but in that case, len is negative (-1).
if (len <= 0) {
eprintf("Invalid hexpair string\n");
goto beach;
}
} else { // use clipboard as key
const ut8 *tmp = rz_buf_data(core->yank_buf, &len);
str = rz_mem_dup(tmp, len);
if (!str) {
goto beach;
}
}
} else {
len = 0;
}
// execute the operand
if (op == 'e') {
int wordsize = 1;
char *os, *p, *s = strdup(arg);
int n = 0, from = 0, to = UT8_MAX, dif = 0, step = 1;
os = s;
p = strchr(s, ' ');
if (p) {
*p = 0;
from = rz_num_math(core->num, s);
s = p + 1;
}
p = strchr(s, ' ');
if (p) {
*p = 0;
to = rz_num_math(core->num, s);
s = p + 1;
}
p = strchr(s, ' ');
if (p) {
*p = 0;
step = rz_num_math(core->num, s);
s = p + 1;
wordsize = rz_num_math(core->num, s);
} else {
step = rz_num_math(core->num, s);
}
free(os);
eprintf("from %d to %d step %d size %d\n", from, to, step, wordsize);
dif = (to <= from) ? UT8_MAX : to - from + 1;
if (wordsize == 1) {
from %= (UT8_MAX + 1);
}
if (dif < 1) {
dif = UT8_MAX + 1;
}
if (step < 1) {
step = 1;
}
if (wordsize < 1) {
wordsize = 1;
}
if (wordsize == 1) {
for (i = n = 0; i < core->blocksize; i++, n += step) {
buf[i] = (ut8)(n % dif) + from;
}
} else if (wordsize == 2) {
ut16 num16 = from;
for (i = 0; i < core->blocksize; i += wordsize, num16 += step) {
rz_write_le16(buf + i, num16);
}
} else if (wordsize == 4) {
ut32 num32 = from;
for (i = 0; i < core->blocksize; i += wordsize, num32 += step) {
rz_write_le32(buf + i, num32);
}
} else if (wordsize == 8) {
ut64 num64 = from;
for (i = 0; i < core->blocksize; i += wordsize, num64 += step) {
rz_write_le64(buf + i, num64);
}
} else {
eprintf("Invalid word size. Use 1, 2, 4 or 8\n");
}
} else if (op == '2' || op == '4' || op == '8') { // "wo2" "wo4" "wo8"
int inc = op - '0';
ut8 tmp;
for (i = 0; (i + inc) <= core->blocksize; i += inc) {
if (inc == 2) {
tmp = buf[i];
buf[i] = buf[i + 1];
buf[i + 1] = tmp;
} else if (inc == 4) {
tmp = buf[i];
buf[i] = buf[i + 3];
buf[i + 3] = tmp;
tmp = buf[i + 1];
buf[i + 1] = buf[i + 2];
buf[i + 2] = tmp;
} else if (inc == 8) {
tmp = buf[i];
buf[i] = buf[i + 7];
buf[i + 7] = tmp;
tmp = buf[i + 1];
buf[i + 1] = buf[i + 6];
buf[i + 6] = tmp;
tmp = buf[i + 2];
buf[i + 2] = buf[i + 5];
buf[i + 5] = tmp;
tmp = buf[i + 3];
buf[i + 3] = buf[i + 4];
buf[i + 4] = tmp;
} else {
eprintf("Invalid inc, use 2, 4 or 8.\n");
break;
}
}
} else {
bool be = rz_config_get_i(core->config, "cfg.bigendian");
if (!be) {
if (!__endian_swap((ut8 *)str, len, len)) {
goto beach;
}
}
for (i = j = 0; i < core->blocksize; i++) {
switch (op) {
case 'x': buf[i] ^= str[j]; break;
case 'a': buf[i] += str[j]; break;
case 's': buf[i] -= str[j]; break;
case 'm': buf[i] *= str[j]; break;
case 'w': buf[i] = str[j]; break;
case 'd': buf[i] = (str[j]) ? (buf[i] / str[j]) : 0; break;
case 'r': buf[i] >>= str[j]; break;
case 'l': buf[i] <<= str[j]; break;
case 'o': buf[i] |= str[j]; break;
case 'A': buf[i] &= str[j]; break;
}
j++;
if (j >= len) {
j = 0; /* cyclic key */
}
}
}
free(str);
return buf;
beach:
free(str);
free(buf);
return NULL;
}
RZ_API int rz_core_write_op(RzCore *core, const char *arg, char op) {
ut8 *buf = rz_core_transform_op(core, arg, op);
if (!buf) {
return false;
}
int ret = rz_core_write_at(core, core->offset, buf, core->blocksize);
free(buf);
return ret;
}
// Get address-specific bits and arch at a certain address.
// If there are no specific infos (i.e. asm.bits and asm.arch should apply), the bits and arch will be 0 or NULL respectively!
RZ_API void rz_core_arch_bits_at(RzCore *core, ut64 addr, RZ_OUT RZ_NULLABLE int *bits, RZ_OUT RZ_BORROW RZ_NULLABLE const char **arch) {
@ -366,6 +151,9 @@ RZ_API bool rz_core_write_at(RzCore *core, ut64 addr, const ut8 *buf, int size)
if (addr >= core->offset && addr <= core->offset + core->blocksize - 1) {
rz_core_block_read(core);
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, size, true);
}
return ret;
}
@ -492,9 +280,6 @@ RZ_API int rz_core_write_hexpair(RzCore *core, ut64 addr, const char *pairs) {
RZ_LOG_ERROR("Could not write hexpair '%s' at %" PFMT64x "\n", pairs, addr);
goto err;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, len, true);
}
err:
free(buf);
return len;
@ -525,9 +310,6 @@ RZ_API bool rz_core_write_block(RzCore *core, ut64 addr, ut8 *data, size_t len)
RZ_LOG_ERROR("Could not write cyclic data (%d bytes) at %" PFMT64x "\n", core->blocksize, addr);
goto err;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, core->blocksize, true);
}
res = true;
err:
free(buf);
@ -563,10 +345,6 @@ RZ_API int rz_core_write_assembly(RzCore *core, ut64 addr, const char *instructi
goto err;
}
ret = acode->len;
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, ret, true);
}
err:
rz_asm_code_free(acode);
return ret;
@ -616,10 +394,6 @@ RZ_API int rz_core_write_assembly_fill(RzCore *core, ut64 addr, const char *inst
goto err;
}
ret = acode->len;
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, ret, true);
}
err:
rz_asm_code_free(acode);
return ret;
@ -761,10 +535,6 @@ RZ_API bool rz_core_write_value_at(RzCore *core, ut64 addr, ut64 value, int sz)
core->num->value = 1;
return false;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, sz, true);
}
return true;
}
@ -822,10 +592,6 @@ RZ_API bool rz_core_write_value_inc_at(RzCore *core, ut64 addr, st64 value, int
RZ_LOG_ERROR("Could not write %d bytes at %" PFMT64x "\n", sz, addr);
return false;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, sz, true);
}
return true;
}
@ -850,13 +616,52 @@ RZ_API bool rz_core_write_string_at(RzCore *core, ut64 addr, const char *s) {
free(str);
return false;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, len, true);
}
free(str);
return true;
}
/**
* \brief Write a given string \p s as a wide string at the specified \p addr
*
* \param core RzCore reference
* \param addr Address where to write the string
* \param s String to write. The string is unescaped, meaning that if there is `\n` it becomes 0x0a
*/
RZ_API bool rz_core_write_string_wide_at(RzCore *core, ut64 addr, const char *s) {
rz_return_val_if_fail(core && s, false);
bool res = false;
char *str = strdup(s);
if (!str) {
return false;
}
int len = rz_str_unescape(str);
if (len < 1) {
goto str_err;
}
len++; // Consider for the terminator char
char *tmp = RZ_NEWS(char, len * 2);
if (!tmp) {
goto str_err;
}
for (int i = 0; i < len; i++) {
tmp[i * 2] = str[i];
tmp[i * 2 + 1] = 0;
}
if (!rz_core_write_at(core, addr, (const ut8 *)tmp, len * 2)) {
RZ_LOG_ERROR("Could not write wide string '%s' at %" PFMT64x "\n", s, addr);
free(str);
return false;
}
res = true;
str_err:
free(str);
return res;
}
/**
* \brief Write at the specified \p addr the length of the string in one byte,
* followed by the given string \p s
@ -881,9 +686,6 @@ RZ_API bool rz_core_write_length_string_at(RzCore *core, ut64 addr, const char *
free(str);
return false;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, len, true);
}
free(str);
return true;
}
@ -927,11 +729,7 @@ RZ_API bool rz_core_write_base64_at(RzCore *core, ut64 addr, const char *s) {
RZ_LOG_ERROR("Could not write base64 encoded string '%s' at %" PFMT64x "\n", s, addr);
goto err;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, len, true);
}
res = true;
err:
free(buf);
return res;
@ -959,11 +757,7 @@ RZ_API bool rz_core_write_base64d_at(RzCore *core, ut64 addr, const char *s) {
RZ_LOG_ERROR("Could not write base64 decoded string '%s' at %" PFMT64x "\n", s, addr);
goto err;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, len, true);
}
res = true;
err:
free(buf);
return res;
@ -994,11 +788,7 @@ RZ_API bool rz_core_write_random_at(RzCore *core, ut64 addr, size_t len) {
RZ_LOG_ERROR("Could not write random data of length %zd at %" PFMT64x "\n", len, addr);
goto err;
}
if (rz_config_get_i(core->config, "cfg.wseek")) {
rz_core_seek_delta(core, len, true);
}
res = true;
err:
free(buf);
return res;
@ -1104,3 +894,202 @@ RZ_API RzCmdStatus rz_core_io_pcache_print(RzCore *core, RzIODesc *desc, RzCmdSt
rz_list_free(caches);
return RZ_CMD_STATUS_OK;
}
/**
* \brief Write a given string \p s, followed by the zero terminator, at the specified \p addr
*
* \param core RzCore reference
* \param addr Address where to write the string
* \param s String to write. The string is unescaped, meaning that if there is `\n` it becomes 0x0a
*/
RZ_API bool rz_core_write_string_zero_at(RzCore *core, ut64 addr, const char *s) {
rz_return_val_if_fail(core && s, false);
char *str = strdup(s);
if (!str) {
return false;
}
int len = rz_str_unescape(str);
if (!rz_core_write_at(core, addr, (const ut8 *)str, len + 1)) {
RZ_LOG_ERROR("Could not write '%s' at %" PFMT64x "\n", s, addr);
free(str);
return false;
}
free(str);
return true;
}
/**
* \brief Transform a block of data at \p addr according to the operation \p op and the hexvalue \p hex
*
* \param core Reference to RzCore instance
* \param addr Where the block of data to modify starts
* \param op Operation to perform on the block of data
* \param hex Optional hex string that may be required by the specific operation
* \param hexlen Optional length of the \p hex string. Must be present if \p hex is specified.
* \param buflen Used to return the length of the returned buffer
* \return The transformed buffer
*/
RZ_API RZ_OWN ut8 *rz_core_transform_op(RzCore *core, ut64 addr, RzCoreWriteOp op, ut8 *hex, int hexlen, int *buflen) {
rz_return_val_if_fail(core, NULL);
rz_return_val_if_fail(!hex || hexlen >= 0, NULL);
rz_return_val_if_fail(buflen, NULL);
switch (op) {
case RZ_CORE_WRITE_OP_ADD:
case RZ_CORE_WRITE_OP_SUB:
case RZ_CORE_WRITE_OP_DIV:
case RZ_CORE_WRITE_OP_MUL:
case RZ_CORE_WRITE_OP_AND:
case RZ_CORE_WRITE_OP_OR:
case RZ_CORE_WRITE_OP_XOR:
case RZ_CORE_WRITE_OP_SHIFT_LEFT:
case RZ_CORE_WRITE_OP_SHIFT_RIGHT:
rz_return_val_if_fail(hex && hexlen >= 0, NULL);
break;
default:
break;
}
ut8 *buf = RZ_NEWS(ut8, core->blocksize);
if (!buf) {
return NULL;
}
int len = rz_io_nread_at(core->io, addr, buf, core->blocksize);
if (len < 0) {
free(buf);
return NULL;
}
for (int i = 0, j = 0; i < len; i++, j = (j + 1) % (hexlen ? hexlen : 1)) {
ut16 tmp16;
ut32 tmp32;
ut64 tmp64;
switch (op) {
case RZ_CORE_WRITE_OP_BYTESWAP2:
if (i + 1 < len) {
tmp16 = rz_read_le16(buf + i);
rz_write_be16(buf + i, tmp16);
i++;
}
break;
case RZ_CORE_WRITE_OP_BYTESWAP4:
if (i + 3 < len) {
tmp32 = rz_read_le32(buf + i);
rz_write_be32(buf + i, tmp32);
i += 3;
}
break;
case RZ_CORE_WRITE_OP_BYTESWAP8:
if (i + 7 < len) {
tmp64 = rz_read_le64(buf + i);
rz_write_be64(buf + i, tmp64);
i += 7;
}
break;
case RZ_CORE_WRITE_OP_ADD:
buf[i] += hex[j];
break;
case RZ_CORE_WRITE_OP_SUB:
buf[i] -= hex[j];
break;
case RZ_CORE_WRITE_OP_DIV:
buf[i] = hex[j] ? buf[i] / hex[j] : 0;
break;
case RZ_CORE_WRITE_OP_MUL:
buf[i] *= hex[j];
break;
case RZ_CORE_WRITE_OP_AND:
buf[i] &= hex[j];
break;
case RZ_CORE_WRITE_OP_OR:
buf[i] |= hex[j];
break;
case RZ_CORE_WRITE_OP_XOR:
buf[i] ^= hex[j];
break;
case RZ_CORE_WRITE_OP_SHIFT_LEFT:
buf[i] <<= hex[j];
break;
case RZ_CORE_WRITE_OP_SHIFT_RIGHT:
buf[i] >>= hex[j];
break;
default:
rz_warn_if_reached();
break;
}
}
*buflen = len;
return buf;
}
/**
* \brief Write a full block of data according to the operation \p op and the hexvalue \p hex
*
* \param core Reference to RzCore instance
* \param addr Where the block of data to modify starts
* \param op Operation to perform on the block of data
* \param hex Optional hex string that may be required by the specific operation
* \param hexlen Optional length of the \p hex string. Must be present if \p hex is specified.
* \return true if the write operation succeeds, false otherwise
*/
RZ_API bool rz_core_write_block_op_at(RzCore *core, ut64 addr, RzCoreWriteOp op, ut8 *hex, int hexlen) {
int buflen;
ut8 *buf = rz_core_transform_op(core, addr, op, hex, hexlen, &buflen);
if (!buf) {
return false;
}
if (!rz_core_write_at(core, addr, buf, buflen)) {
RZ_LOG_ERROR("Could not write block operation at %" PFMT64x "\n", addr);
free(buf);
return false;
}
return true;
}
/**
* \brief Write a full block of data with a sequence
*
* Write a full block of data with a sequence of numbers starting from \p from
* up to \p to, with a step of \p step. The values are written as numbers of
* \p value_size bytes.
*
* \param core Reference to RzCore instance
* \param addr Where the block of data to modify starts
* \param from From where to start the sequence of numbers
* \param to Where to stop in the sequence
* \param step Difference between two numbers in the sequence
* \param value_size Size of each number of the sequence, in bytes
* \return true if the write operation succeeds, false otherwise
*/
RZ_API bool rz_core_write_seq_at(RzCore *core, ut64 addr, ut64 from, ut64 to, ut64 step, int value_size) {
rz_return_val_if_fail(core, false);
rz_return_val_if_fail(value_size == 1 || value_size == 2 || value_size == 4 || value_size == 8, false);
ut64 max_val = (1ULL << (8 * value_size));
rz_return_val_if_fail(from < max_val, false);
rz_return_val_if_fail(to < max_val, false);
ut8 *buf = RZ_NEWS0(ut8, core->blocksize);
if (!buf) {
return false;
}
ut64 diff = to <= from ? max_val : to - from + 1;
ut64 p = from;
for (size_t i = 0; i < core->blocksize; i += value_size, p = (from + ((p + step - from) % diff)) % max_val) {
rz_write_ble(buf + i, p, rz_config_get_b(core->config, "cfg.bigendian"), value_size * 8);
}
if (!rz_core_write_at(core, addr, buf, core->blocksize)) {
RZ_LOG_ERROR("Could not write sequence [%" PFMT64d ", %" PFMT64d "] step=%" PFMT64d ",value_size=%d at %" PFMT64x "\n", from, to, step, value_size, addr);
free(buf);
return false;
}
free(buf);
return true;
}

View file

@ -4105,7 +4105,7 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(redirect_stmt) {
// extract the string of the filename we need to write to
TSNode arg = ts_node_child_by_field_name(node, "arg", strlen("arg"));
char *arg_str = ts_node_sub_string(arg, state->input);
char *arg_str = ts_node_handle_arg(state, node, arg, 2);
if (arg_str[0] == '$') {
// redirect output of command to an alias variable
@ -6038,7 +6038,6 @@ RZ_API void rz_core_cmd_init(RzCore *core) {
{ "q", "exit program session", rz_cmd_quit },
{ "V", "enter visual mode", rz_cmd_visual },
{ "v", "enter visual mode", rz_cmd_panels },
{ "w", "write bytes", rz_cmd_write },
{ "x", "alias for px", rz_cmd_hexdump },
};

View file

@ -2571,8 +2571,69 @@ static int cmd_print_pxA(RzCore *core, int len, const char *input) {
return true;
}
static ut8 *old_transform_op(RzCore *core, const char *val, char op, int *buflen) {
RzCoreWriteOp wop;
switch (op) {
case '2':
wop = RZ_CORE_WRITE_OP_BYTESWAP2;
break;
case '4':
wop = RZ_CORE_WRITE_OP_BYTESWAP4;
break;
case '8':
wop = RZ_CORE_WRITE_OP_BYTESWAP8;
break;
case 'a':
wop = RZ_CORE_WRITE_OP_ADD;
break;
case 'A':
wop = RZ_CORE_WRITE_OP_AND;
break;
case 'd':
wop = RZ_CORE_WRITE_OP_DIV;
break;
case 'l':
wop = RZ_CORE_WRITE_OP_SHIFT_LEFT;
break;
case 'm':
wop = RZ_CORE_WRITE_OP_MUL;
break;
case 'o':
wop = RZ_CORE_WRITE_OP_OR;
break;
case 'r':
wop = RZ_CORE_WRITE_OP_SHIFT_RIGHT;
break;
case 's':
wop = RZ_CORE_WRITE_OP_SUB;
break;
case 'x':
wop = RZ_CORE_WRITE_OP_XOR;
break;
default:
wop = RZ_CORE_WRITE_OP_XOR;
rz_warn_if_reached();
break;
}
ut8 *hex = NULL;
int hexlen = -1;
if (val) {
val = rz_str_trim_head_ro(val);
hex = RZ_NEWS(ut8, (strlen(val) + 1) / 2);
if (!hex) {
return NULL;
}
hexlen = rz_hex_str2bin(val, hex);
}
return rz_core_transform_op(core, core->offset, wop, hex, hexlen, buflen);
}
static void cmd_print_op(RzCore *core, const char *input) {
ut8 *buf;
int buflen = -1;
if (!input[0])
return;
switch (input[1]) {
@ -2588,13 +2649,13 @@ static void cmd_print_op(RzCore *core, const char *input) {
case '2':
case '4':
if (input[2]) { // parse val from arg
buf = rz_core_transform_op(core, input + 3, input[1]);
buf = old_transform_op(core, input + 3, input[1], &buflen);
} else { // use clipboard instead of val
buf = rz_core_transform_op(core, NULL, input[1]);
buf = old_transform_op(core, NULL, input[1], &buflen);
}
break;
case 'n':
buf = rz_core_transform_op(core, "ff", 'x');
buf = old_transform_op(core, "ff", 'x', &buflen);
break;
case '\0':
case '?':
@ -2604,7 +2665,7 @@ static void cmd_print_op(RzCore *core, const char *input) {
}
if (buf) {
rz_print_hexdump(core->print, core->offset, buf,
core->blocksize, 16, 1, 1);
buflen, 16, 1, 1);
free(buf);
}
}

File diff suppressed because it is too large Load diff

View file

@ -46,6 +46,8 @@ static const RzCmdDescDetail w8_details[2];
static const RzCmdDescDetail w6_details[2];
static const RzCmdDescDetail write_extend_hexbytes_details[2];
static const RzCmdDescDetail write_assembly_opcode_details[2];
static const RzCmdDescDetail write_op_sequence_details[2];
static const RzCmdDescDetail wo_details[2];
static const RzCmdDescDetail zign_add_details[5];
static const RzCmdDescDetail tmp_modifiers_details[2];
static const RzCmdDescDetail iterators_details[2];
@ -471,15 +473,18 @@ static const RzCmdDescArg write_base64_encode_args[2];
static const RzCmdDescArg write_extend_zero_args[3];
static const RzCmdDescArg write_extend_shift_args[3];
static const RzCmdDescArg write_extend_hexbytes_args[3];
static const RzCmdDescArg write_unified_patch_args[2];
static const RzCmdDescArg write_random_args[2];
static const RzCmdDescArg write_cache_remove_args[3];
static const RzCmdDescArg write_cache_commit_args[3];
static const RzCmdDescArg write_pcache_list_args[2];
static const RzCmdDescArg write_pcache_commit_args[2];
static const RzCmdDescArg write_zero_string_args[2];
static const RzCmdDescArg write_from_io_args[3];
static const RzCmdDescArg write_from_io_xchg_args[3];
static const RzCmdDescArg write_from_file_args[4];
static const RzCmdDescArg write_from_socket_args[3];
static const RzCmdDescArg write_wide_string_args[2];
static const RzCmdDescArg write_hex_args[2];
static const RzCmdDescArg write_hex_from_file_args[2];
static const RzCmdDescArg write_assembly_args[2];
@ -487,6 +492,22 @@ static const RzCmdDescArg write_assembly_inside_args[2];
static const RzCmdDescArg write_assembly_file_args[2];
static const RzCmdDescArg write_assembly_opcode_args[2];
static const RzCmdDescArg write_block_args[2];
static const RzCmdDescArg write_mask_set_args[2];
static const RzCmdDescArg write_op_add_args[2];
static const RzCmdDescArg write_op_and_args[2];
static const RzCmdDescArg write_op_div_args[2];
static const RzCmdDescArg write_op_shl_args[2];
static const RzCmdDescArg write_op_mul_args[2];
static const RzCmdDescArg write_op_or_args[2];
static const RzCmdDescArg write_op_shr_args[2];
static const RzCmdDescArg write_op_sub_args[2];
static const RzCmdDescArg write_op_xor_args[2];
static const RzCmdDescArg write_op_sequence_args[5];
static const RzCmdDescArg write_op_decrypt_args[4];
static const RzCmdDescArg write_op_encrypt_args[4];
static const RzCmdDescArg write_debruijn_args[2];
static const RzCmdDescArg write_debruijn_find_args[2];
static const RzCmdDescArg write_duplicate_args[3];
static const RzCmdDescArg write_length_string_args[2];
static const RzCmdDescArg yank_args[2];
static const RzCmdDescArg yank_file_args[3];
@ -10518,8 +10539,17 @@ static const RzCmdDescHelp write_extend_hexbytes_help = {
.args = write_extend_hexbytes_args,
};
static const RzCmdDescHelp wu_handler_old_help = {
static const RzCmdDescArg write_unified_patch_args[] = {
{
.name = "file",
.type = RZ_CMD_ARG_TYPE_FILE,
},
{ 0 },
};
static const RzCmdDescHelp write_unified_patch_help = {
.summary = "Apply unified hex patch (see output of cu)",
.args = write_unified_patch_args,
};
static const RzCmdDescArg write_random_args[] = {
@ -10632,12 +10662,18 @@ static const RzCmdDescHelp write_pcache_commit_help = {
.args = write_pcache_commit_args,
};
static const RzCmdDescHelp wz_handler_old_help = {
.summary = "Write zero-terminated string",
};
static const RzCmdDescArg write_zero_string_args[] = {
{
.name = "string",
.type = RZ_CMD_ARG_TYPE_STRING,
.flags = RZ_CMD_ARG_FLAG_LAST,
static const RzCmdDescHelp wt_handler_old_help = {
.summary = "Write to file",
},
{ 0 },
};
static const RzCmdDescHelp write_zero_string_help = {
.summary = "Write zero-terminated string",
.args = write_zero_string_args,
};
static const RzCmdDescHelp wf_help = {
@ -10727,8 +10763,18 @@ static const RzCmdDescHelp write_from_socket_help = {
.args = write_from_socket_args,
};
static const RzCmdDescHelp ww_handler_old_help = {
static const RzCmdDescArg write_wide_string_args[] = {
{
.name = "string",
.type = RZ_CMD_ARG_TYPE_STRING,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_wide_string_help = {
.summary = "Write wide 16 little endian string",
.args = write_wide_string_args,
};
static const RzCmdDescHelp wx_help = {
@ -10854,16 +10900,338 @@ static const RzCmdDescHelp write_block_help = {
.args = write_block_args,
};
static const RzCmdDescHelp wm_handler_old_help = {
static const RzCmdDescHelp wm_help = {
.summary = "Set binary mask hexpair to be used as cyclic write mask",
};
static const RzCmdDescArg write_mask_set_args[] = {
{
.name = "hex_mask",
.type = RZ_CMD_ARG_TYPE_STRING,
.flags = RZ_CMD_ARG_FLAG_LAST,
static const RzCmdDescHelp wo_handler_old_help = {
.summary = "Write in block with operation",
},
{ 0 },
};
static const RzCmdDescHelp write_mask_set_help = {
.summary = "Set a write mask",
.description = "Set a write mask that is applied whenever a following write operation is performed. Data will be masked as if the first byte of data is in arithmetic AND (&) with the first byte of the mask, the second byte of data with the second byte of the mask, and so on.",
.args = write_mask_set_args,
};
static const RzCmdDescHelp wd_handler_old_help = {
.summary = "Duplicate N bytes from offset at current seek",
static const RzCmdDescArg write_mask_reset_args[] = {
{ 0 },
};
static const RzCmdDescHelp write_mask_reset_help = {
.summary = "Remove the write mask",
.args = write_mask_reset_args,
};
static const RzCmdDescDetailEntry wo_Examples_detail_entries[] = {
{ .text = "woa", .arg_str = " 20", .comment = "Content before: 1122334455 ; Content after: 3142536475" },
{ .text = "wos", .arg_str = " 2021", .comment = "Content before: 1122334455 ; Content after: f101132335" },
{ .text = "wo4", .arg_str = "", .comment = "Content before: 1122334455667788; Content after: 4433221188776655" },
{ 0 },
};
static const RzCmdDescDetail wo_details[] = {
{ .name = "Examples", .entries = wo_Examples_detail_entries },
{ 0 },
};
static const RzCmdDescHelp wo_help = {
.summary = "Write a block with a special operation",
.details = wo_details,
};
static const RzCmdDescArg write_op_2byteswap_args[] = {
{ 0 },
};
static const RzCmdDescHelp write_op_2byteswap_help = {
.summary = "Swap the endianess of 2-bytes values in the current block",
.args = write_op_2byteswap_args,
};
static const RzCmdDescArg write_op_4byteswap_args[] = {
{ 0 },
};
static const RzCmdDescHelp write_op_4byteswap_help = {
.summary = "Swap the endianess of 4-bytes values in the current block",
.args = write_op_4byteswap_args,
};
static const RzCmdDescArg write_op_8byteswap_args[] = {
{ 0 },
};
static const RzCmdDescHelp write_op_8byteswap_help = {
.summary = "Swap the endianess of 8-bytes values in the current block",
.args = write_op_8byteswap_args,
};
static const RzCmdDescArg write_op_add_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_add_help = {
.summary = "Add each existing byte in the block with the given <value>",
.args = write_op_add_args,
};
static const RzCmdDescArg write_op_and_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_and_help = {
.summary = "Bitwise-and each existing byte in the block with the given <value>",
.args = write_op_and_args,
};
static const RzCmdDescArg write_op_div_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_div_help = {
.summary = "Divide each existing byte in the block with the given <value>",
.args = write_op_div_args,
};
static const RzCmdDescArg write_op_shl_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_shl_help = {
.summary = "Bitwise-shift-left each existing byte in the block with the given <value>",
.args = write_op_shl_args,
};
static const RzCmdDescArg write_op_mul_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_mul_help = {
.summary = "Multiply each existing byte in the block with the given <value>",
.args = write_op_mul_args,
};
static const RzCmdDescArg write_op_or_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_or_help = {
.summary = "Bitwise-or each existing byte in the block with the given <value>",
.args = write_op_or_args,
};
static const RzCmdDescArg write_op_shr_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_shr_help = {
.summary = "Bitwise-shift-right each existing byte in the block with the given <value>",
.args = write_op_shr_args,
};
static const RzCmdDescArg write_op_sub_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_sub_help = {
.summary = "Subtract each existing byte in the block with the given <value>",
.args = write_op_sub_args,
};
static const RzCmdDescArg write_op_xor_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_op_xor_help = {
.summary = "Bitwise-xor each existing byte in the block with the given <value>",
.args = write_op_xor_args,
};
static const RzCmdDescDetailEntry write_op_sequence_Examples_detail_entries[] = {
{ .text = "woe", .arg_str = " 1 3 1", .comment = "Write 010203010203010203" },
{ .text = "woe", .arg_str = " 1 4 2", .comment = "Write 010301030103010301" },
{ .text = "woe", .arg_str = " 1 5 2", .comment = "Write 010305020401030502" },
{ .text = "woe", .arg_str = " 1 3 1 2", .comment = "Write 01000200030001000200" },
{ 0 },
};
static const RzCmdDescDetail write_op_sequence_details[] = {
{ .name = "Examples", .entries = write_op_sequence_Examples_detail_entries },
{ 0 },
};
static const RzCmdDescArg write_op_sequence_args[] = {
{
.name = "from",
.type = RZ_CMD_ARG_TYPE_NUM,
},
{
.name = "to",
.type = RZ_CMD_ARG_TYPE_NUM,
},
{
.name = "step",
.type = RZ_CMD_ARG_TYPE_NUM,
.default_value = "1",
},
{
.name = "value_size",
.type = RZ_CMD_ARG_TYPE_NUM,
.default_value = "1",
},
{ 0 },
};
static const RzCmdDescHelp write_op_sequence_help = {
.summary = "Write a sequence repeatedly with values from <from> up to <to> in the block",
.description = "Write a sequence of data to fill the whole block at the current offset. The sequence is formed starting from <from> up to <to>, with an increment specified in <step>. Each value is written as a <value_size>-bytes value, according to the endianess specified in cfg.bigendian.",
.details = write_op_sequence_details,
.args = write_op_sequence_args,
};
static const RzCmdDescArg write_op_decrypt_args[] = {
{
.name = "algo",
.type = RZ_CMD_ARG_TYPE_STRING,
},
{
.name = "key",
.type = RZ_CMD_ARG_TYPE_STRING,
},
{
.name = "IV",
.type = RZ_CMD_ARG_TYPE_STRING,
.flags = RZ_CMD_ARG_FLAG_LAST,
.optional = true,
},
{ 0 },
};
static const RzCmdDescHelp write_op_decrypt_help = {
.summary = "Decrypt current block with given <algo>, <key> and optional <IV>",
.args = write_op_decrypt_args,
};
static const RzCmdDescArg write_op_encrypt_args[] = {
{
.name = "algo",
.type = RZ_CMD_ARG_TYPE_STRING,
},
{
.name = "key",
.type = RZ_CMD_ARG_TYPE_STRING,
},
{
.name = "IV",
.type = RZ_CMD_ARG_TYPE_STRING,
.flags = RZ_CMD_ARG_FLAG_LAST,
.optional = true,
},
{ 0 },
};
static const RzCmdDescHelp write_op_encrypt_help = {
.summary = "Encrypt current block with given <algo>, <key> and optional <IV>",
.args = write_op_encrypt_args,
};
static const RzCmdDescHelp wD_help = {
.summary = "Write De Bruijn Pattern",
};
static const RzCmdDescArg write_debruijn_args[] = {
{
.name = "len",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_debruijn_help = {
.summary = "Write a De Bruijn Pattern of length <len> at the current offset",
.args = write_debruijn_args,
};
static const RzCmdDescArg write_debruijn_find_args[] = {
{
.name = "value",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_debruijn_find_help = {
.summary = "Returns the offset where <value> can be found in a De Bruijn Pattern",
.description = "It search for a particular value in the pattern as returned by the `wD` command. <value> is assumed to be a number of as few bytes as necessary, in the endian specified by cfg.bigendian.",
.args = write_debruijn_find_args,
};
static const RzCmdDescArg write_duplicate_args[] = {
{
.name = "src",
.type = RZ_CMD_ARG_TYPE_RZNUM,
},
{
.name = "len",
.type = RZ_CMD_ARG_TYPE_RZNUM,
.flags = RZ_CMD_ARG_FLAG_LAST,
},
{ 0 },
};
static const RzCmdDescHelp write_duplicate_help = {
.summary = "Duplicate <len> bytes from <src> offset to current seek",
.args = write_duplicate_args,
};
static const RzCmdDescArg write_length_string_args[] = {
@ -14144,8 +14512,8 @@ RZ_IPI void rzshell_cmddescs_init(RzCore *core) {
RzCmdDesc *write_extend_hexbytes_cd = rz_cmd_desc_argv_new(core->rcmd, we_cd, "wex", rz_write_extend_hexbytes_handler, &write_extend_hexbytes_help);
rz_warn_if_fail(write_extend_hexbytes_cd);
RzCmdDesc *wu_handler_old_cd = rz_cmd_desc_oldinput_new(core->rcmd, w_cd, "wu", rz_wu_handler_old, &wu_handler_old_help);
rz_warn_if_fail(wu_handler_old_cd);
RzCmdDesc *write_unified_patch_cd = rz_cmd_desc_argv_new(core->rcmd, w_cd, "wu", rz_write_unified_patch_handler, &write_unified_patch_help);
rz_warn_if_fail(write_unified_patch_cd);
RzCmdDesc *write_random_cd = rz_cmd_desc_argv_new(core->rcmd, w_cd, "wr", rz_write_random_handler, &write_random_help);
rz_warn_if_fail(write_random_cd);
@ -14170,11 +14538,8 @@ RZ_IPI void rzshell_cmddescs_init(RzCore *core) {
RzCmdDesc *write_pcache_commit_cd = rz_cmd_desc_argv_new(core->rcmd, wc_cd, "wcpi", rz_write_pcache_commit_handler, &write_pcache_commit_help);
rz_warn_if_fail(write_pcache_commit_cd);
RzCmdDesc *wz_handler_old_cd = rz_cmd_desc_oldinput_new(core->rcmd, w_cd, "wz", rz_wz_handler_old, &wz_handler_old_help);
rz_warn_if_fail(wz_handler_old_cd);
RzCmdDesc *wt_handler_old_cd = rz_cmd_desc_oldinput_new(core->rcmd, w_cd, "wt", rz_wt_handler_old, &wt_handler_old_help);
rz_warn_if_fail(wt_handler_old_cd);
RzCmdDesc *write_zero_string_cd = rz_cmd_desc_argv_new(core->rcmd, w_cd, "wz", rz_write_zero_string_handler, &write_zero_string_help);
rz_warn_if_fail(write_zero_string_cd);
RzCmdDesc *wf_cd = rz_cmd_desc_group_new(core->rcmd, w_cd, "wf", rz_write_from_io_handler, &write_from_io_help, &wf_help);
rz_warn_if_fail(wf_cd);
@ -14187,8 +14552,8 @@ RZ_IPI void rzshell_cmddescs_init(RzCore *core) {
RzCmdDesc *write_from_socket_cd = rz_cmd_desc_argv_new(core->rcmd, wf_cd, "wfs", rz_write_from_socket_handler, &write_from_socket_help);
rz_warn_if_fail(write_from_socket_cd);
RzCmdDesc *ww_handler_old_cd = rz_cmd_desc_oldinput_new(core->rcmd, w_cd, "ww", rz_ww_handler_old, &ww_handler_old_help);
rz_warn_if_fail(ww_handler_old_cd);
RzCmdDesc *write_wide_string_cd = rz_cmd_desc_argv_new(core->rcmd, w_cd, "ww", rz_write_wide_string_handler, &write_wide_string_help);
rz_warn_if_fail(write_wide_string_cd);
RzCmdDesc *wx_cd = rz_cmd_desc_group_new(core->rcmd, w_cd, "wx", rz_write_hex_handler, &write_hex_help, &wx_help);
rz_warn_if_fail(wx_cd);
@ -14209,14 +14574,65 @@ RZ_IPI void rzshell_cmddescs_init(RzCore *core) {
RzCmdDesc *write_block_cd = rz_cmd_desc_argv_new(core->rcmd, w_cd, "wb", rz_write_block_handler, &write_block_help);
rz_warn_if_fail(write_block_cd);
RzCmdDesc *wm_handler_old_cd = rz_cmd_desc_oldinput_new(core->rcmd, w_cd, "wm", rz_wm_handler_old, &wm_handler_old_help);
rz_warn_if_fail(wm_handler_old_cd);
RzCmdDesc *wm_cd = rz_cmd_desc_group_new(core->rcmd, w_cd, "wm", rz_write_mask_set_handler, &write_mask_set_help, &wm_help);
rz_warn_if_fail(wm_cd);
RzCmdDesc *write_mask_reset_cd = rz_cmd_desc_argv_new(core->rcmd, wm_cd, "wm-", rz_write_mask_reset_handler, &write_mask_reset_help);
rz_warn_if_fail(write_mask_reset_cd);
RzCmdDesc *wo_handler_old_cd = rz_cmd_desc_oldinput_new(core->rcmd, w_cd, "wo", rz_wo_handler_old, &wo_handler_old_help);
rz_warn_if_fail(wo_handler_old_cd);
RzCmdDesc *wo_cd = rz_cmd_desc_group_new(core->rcmd, w_cd, "wo", NULL, NULL, &wo_help);
rz_warn_if_fail(wo_cd);
RzCmdDesc *write_op_2byteswap_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wo2", rz_write_op_2byteswap_handler, &write_op_2byteswap_help);
rz_warn_if_fail(write_op_2byteswap_cd);
RzCmdDesc *wd_handler_old_cd = rz_cmd_desc_oldinput_new(core->rcmd, w_cd, "wd", rz_wd_handler_old, &wd_handler_old_help);
rz_warn_if_fail(wd_handler_old_cd);
RzCmdDesc *write_op_4byteswap_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wo4", rz_write_op_4byteswap_handler, &write_op_4byteswap_help);
rz_warn_if_fail(write_op_4byteswap_cd);
RzCmdDesc *write_op_8byteswap_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wo8", rz_write_op_8byteswap_handler, &write_op_8byteswap_help);
rz_warn_if_fail(write_op_8byteswap_cd);
RzCmdDesc *write_op_add_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "woa", rz_write_op_add_handler, &write_op_add_help);
rz_warn_if_fail(write_op_add_cd);
RzCmdDesc *write_op_and_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "woA", rz_write_op_and_handler, &write_op_and_help);
rz_warn_if_fail(write_op_and_cd);
RzCmdDesc *write_op_div_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wod", rz_write_op_div_handler, &write_op_div_help);
rz_warn_if_fail(write_op_div_cd);
RzCmdDesc *write_op_shl_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wol", rz_write_op_shl_handler, &write_op_shl_help);
rz_warn_if_fail(write_op_shl_cd);
RzCmdDesc *write_op_mul_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wom", rz_write_op_mul_handler, &write_op_mul_help);
rz_warn_if_fail(write_op_mul_cd);
RzCmdDesc *write_op_or_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "woo", rz_write_op_or_handler, &write_op_or_help);
rz_warn_if_fail(write_op_or_cd);
RzCmdDesc *write_op_shr_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wor", rz_write_op_shr_handler, &write_op_shr_help);
rz_warn_if_fail(write_op_shr_cd);
RzCmdDesc *write_op_sub_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wos", rz_write_op_sub_handler, &write_op_sub_help);
rz_warn_if_fail(write_op_sub_cd);
RzCmdDesc *write_op_xor_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "wox", rz_write_op_xor_handler, &write_op_xor_help);
rz_warn_if_fail(write_op_xor_cd);
RzCmdDesc *write_op_sequence_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "woe", rz_write_op_sequence_handler, &write_op_sequence_help);
rz_warn_if_fail(write_op_sequence_cd);
RzCmdDesc *write_op_decrypt_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "woD", rz_write_op_decrypt_handler, &write_op_decrypt_help);
rz_warn_if_fail(write_op_decrypt_cd);
RzCmdDesc *write_op_encrypt_cd = rz_cmd_desc_argv_new(core->rcmd, wo_cd, "woE", rz_write_op_encrypt_handler, &write_op_encrypt_help);
rz_warn_if_fail(write_op_encrypt_cd);
RzCmdDesc *wD_cd = rz_cmd_desc_group_new(core->rcmd, w_cd, "wD", rz_write_debruijn_handler, &write_debruijn_help, &wD_help);
rz_warn_if_fail(wD_cd);
RzCmdDesc *write_debruijn_find_cd = rz_cmd_desc_argv_new(core->rcmd, wD_cd, "wD/", rz_write_debruijn_find_handler, &write_debruijn_find_help);
rz_warn_if_fail(write_debruijn_find_cd);
RzCmdDesc *write_duplicate_cd = rz_cmd_desc_argv_new(core->rcmd, w_cd, "wd", rz_write_duplicate_handler, &write_duplicate_help);
rz_warn_if_fail(write_duplicate_cd);
RzCmdDesc *write_length_string_cd = rz_cmd_desc_argv_new(core->rcmd, w_cd, "ws", rz_write_length_string_handler, &write_length_string_help);
rz_warn_if_fail(write_length_string_cd);

View file

@ -749,7 +749,7 @@ RZ_IPI RzCmdStatus rz_write_base64_encode_handler(RzCore *core, int argc, const
RZ_IPI RzCmdStatus rz_write_extend_zero_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_extend_shift_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_extend_hexbytes_handler(RzCore *core, int argc, const char **argv);
RZ_IPI int rz_wu_handler_old(void *data, const char *input);
RZ_IPI RzCmdStatus rz_write_unified_patch_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_random_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_cache_list_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state);
RZ_IPI RzCmdStatus rz_write_cache_remove_handler(RzCore *core, int argc, const char **argv);
@ -758,13 +758,12 @@ RZ_IPI RzCmdStatus rz_write_cache_commit_handler(RzCore *core, int argc, const c
RZ_IPI RzCmdStatus rz_write_cache_commit_all_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_pcache_list_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state);
RZ_IPI RzCmdStatus rz_write_pcache_commit_handler(RzCore *core, int argc, const char **argv);
RZ_IPI int rz_wz_handler_old(void *data, const char *input);
RZ_IPI int rz_wt_handler_old(void *data, const char *input);
RZ_IPI RzCmdStatus rz_write_zero_string_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_from_io_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_from_io_xchg_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_from_file_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_from_socket_handler(RzCore *core, int argc, const char **argv);
RZ_IPI int rz_ww_handler_old(void *data, const char *input);
RZ_IPI RzCmdStatus rz_write_wide_string_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_hex_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_hex_from_file_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_assembly_handler(RzCore *core, int argc, const char **argv);
@ -772,9 +771,26 @@ RZ_IPI RzCmdStatus rz_write_assembly_inside_handler(RzCore *core, int argc, cons
RZ_IPI RzCmdStatus rz_write_assembly_file_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_assembly_opcode_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_block_handler(RzCore *core, int argc, const char **argv);
RZ_IPI int rz_wm_handler_old(void *data, const char *input);
RZ_IPI int rz_wo_handler_old(void *data, const char *input);
RZ_IPI int rz_wd_handler_old(void *data, const char *input);
RZ_IPI RzCmdStatus rz_write_mask_set_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_mask_reset_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_2byteswap_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_4byteswap_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_8byteswap_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_add_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_and_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_div_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_shl_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_mul_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_or_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_shr_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_sub_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_xor_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_sequence_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_decrypt_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_op_encrypt_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_debruijn_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_debruijn_find_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_duplicate_handler(RzCore *core, int argc, const char **argv);
RZ_IPI RzCmdStatus rz_write_length_string_handler(RzCore *core, int argc, const char **argv);
RZ_IPI int rz_cmd_hexdump(void *data, const char *input);
RZ_IPI RzCmdStatus rz_yank_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state);

View file

@ -301,9 +301,11 @@ commands:
arg_str: " 414243"
comment: Insert the characters "ABC" at the current offset and extend the file
- name: wu
cname: wu_handler_old
cname: write_unified_patch
summary: Apply unified hex patch (see output of cu)
type: RZ_CMD_DESC_TYPE_OLDINPUT
args:
- name: file
type: RZ_CMD_ARG_TYPE_FILE
- name: wr
cname: write_random
summary: Write <len> random bytes
@ -368,13 +370,11 @@ commands:
type: RZ_CMD_ARG_TYPE_NUM
optional: true
- name: wz
cname: wz_handler_old
cname: write_zero_string
summary: Write zero-terminated string
type: RZ_CMD_DESC_TYPE_OLDINPUT
- name: wt
cname: wt_handler_old
summary: Write to file
type: RZ_CMD_DESC_TYPE_OLDINPUT
args:
- name: string
type: RZ_CMD_ARG_TYPE_STRING
- name: wf
summary: Write data from file, socket, offset
subcommands:
@ -416,9 +416,11 @@ commands:
type: RZ_CMD_ARG_TYPE_RZNUM
optional: true
- name: ww
cname: ww_handler_old
cname: write_wide_string
summary: Write wide 16 little endian string
type: RZ_CMD_DESC_TYPE_OLDINPUT
args:
- name: string
type: RZ_CMD_ARG_TYPE_STRING
- name: wx
summary: Write hexadecimal data
subcommands:
@ -516,17 +518,188 @@ commands:
- name: hex
type: RZ_CMD_ARG_TYPE_STRING
- name: wm
cname: wm_handler_old
summary: Set binary mask hexpair to be used as cyclic write mask
type: RZ_CMD_DESC_TYPE_OLDINPUT
subcommands:
- name: wm
cname: write_mask_set
summary: Set a write mask
description: >
Set a write mask that is applied whenever a following write operation
is performed. Data will be masked as if the first byte of data is in
arithmetic AND (&) with the first byte of the mask, the second byte of
data with the second byte of the mask, and so on.
args:
- name: hex_mask
type: RZ_CMD_ARG_TYPE_STRING
- name: wm-
cname: write_mask_reset
summary: Remove the write mask
args: []
- name: wo
cname: wo_handler_old
summary: Write in block with operation
type: RZ_CMD_DESC_TYPE_OLDINPUT
summary: Write a block with a special operation
subcommands:
- name: wo2
cname: write_op_2byteswap
summary: Swap the endianess of 2-bytes values in the current block
args: []
- name: wo4
cname: write_op_4byteswap
summary: Swap the endianess of 4-bytes values in the current block
args: []
- name: wo8
cname: write_op_8byteswap
summary: Swap the endianess of 8-bytes values in the current block
args: []
- name: woa
cname: write_op_add
summary: Add each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: woA
cname: write_op_and
summary: Bitwise-and each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: wod
cname: write_op_div
summary: Divide each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: wol
cname: write_op_shl
summary: Bitwise-shift-left each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: wom
cname: write_op_mul
summary: Multiply each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: woo
cname: write_op_or
summary: Bitwise-or each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: wor
cname: write_op_shr
summary: Bitwise-shift-right each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: wos
cname: write_op_sub
summary: Subtract each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: wox
cname: write_op_xor
summary: Bitwise-xor each existing byte in the block with the given <value>
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: woe
cname: write_op_sequence
summary: Write a sequence repeatedly with values from <from> up to <to> in the block
description: >
Write a sequence of data to fill the whole block at the current
offset. The sequence is formed starting from <from> up to <to>, with
an increment specified in <step>. Each value is written as a
<value_size>-bytes value, according to the endianess specified in
cfg.bigendian.
args:
- name: from
type: RZ_CMD_ARG_TYPE_NUM
- name: to
type: RZ_CMD_ARG_TYPE_NUM
- name: step
type: RZ_CMD_ARG_TYPE_NUM
default_value: 1
- name: value_size
type: RZ_CMD_ARG_TYPE_NUM
default_value: 1
details:
- name: Examples
entries:
- text: woe
arg_str: " 1 3 1"
comment: "Write 010203010203010203"
- text: woe
arg_str: " 1 4 2"
comment: "Write 010301030103010301"
- text: woe
arg_str: " 1 5 2"
comment: "Write 010305020401030502"
- text: woe
arg_str: " 1 3 1 2"
comment: "Write 01000200030001000200"
- name: woD
cname: write_op_decrypt
summary: Decrypt current block with given <algo>, <key> and optional <IV>
args:
- name: algo
type: RZ_CMD_ARG_TYPE_STRING
- name: key
type: RZ_CMD_ARG_TYPE_STRING
- name: IV
type: RZ_CMD_ARG_TYPE_STRING
optional: true
- name: woE
cname: write_op_encrypt
summary: Encrypt current block with given <algo>, <key> and optional <IV>
args:
- name: algo
type: RZ_CMD_ARG_TYPE_STRING
- name: key
type: RZ_CMD_ARG_TYPE_STRING
- name: IV
type: RZ_CMD_ARG_TYPE_STRING
optional: true
details:
- name: Examples
entries:
- text: woa
arg_str: " 20"
comment: "Content before: 1122334455 ; Content after: 3142536475"
- text: wos
arg_str: " 2021"
comment: "Content before: 1122334455 ; Content after: f101132335"
- text: wo4
arg_str: ""
comment: "Content before: 1122334455667788; Content after: 4433221188776655"
- name: wD
summary: Write De Bruijn Pattern
subcommands:
- name: wD
cname: write_debruijn
summary: Write a De Bruijn Pattern of length <len> at the current offset
args:
- name: len
type: RZ_CMD_ARG_TYPE_RZNUM
- name: wD/
cname: write_debruijn_find
summary: Returns the offset where <value> can be found in a De Bruijn Pattern
description: >
It search for a particular value in the pattern as returned by the
`wD` command. <value> is assumed to be a number of as few bytes as
necessary, in the endian specified by cfg.bigendian.
args:
- name: value
type: RZ_CMD_ARG_TYPE_RZNUM
- name: wd
cname: wd_handler_old
summary: Duplicate N bytes from offset at current seek
type: RZ_CMD_DESC_TYPE_OLDINPUT
summary: Duplicate <len> bytes from <src> offset to current seek
cname: write_duplicate
args:
- name: src
type: RZ_CMD_ARG_TYPE_RZNUM
- name: len
type: RZ_CMD_ARG_TYPE_RZNUM
- name: ws
cname: write_length_string
summary: Write 1 byte for length and then the string

View file

@ -103,6 +103,21 @@ typedef enum {
RZ_CORE_VISUAL_MODE_CD = 4 ///< Print in string format
} RzCoreVisualMode;
typedef enum {
RZ_CORE_WRITE_OP_BYTESWAP2, ///< Swap the endianess of 2-bytes values
RZ_CORE_WRITE_OP_BYTESWAP4, ///< Swap the endianess of 4-bytes values
RZ_CORE_WRITE_OP_BYTESWAP8, ///< Swap the endianess of 8-bytes values
RZ_CORE_WRITE_OP_ADD, ///< Write the addition of existing byte and argument value
RZ_CORE_WRITE_OP_SUB, ///< Write the subtraction of existing byte and argument value
RZ_CORE_WRITE_OP_DIV, ///< Write the division of existing byte and argument value
RZ_CORE_WRITE_OP_MUL, ///< Write the multiplication of existing byte and argument value
RZ_CORE_WRITE_OP_AND, ///< Write the bitwise-and of existing byte and argument value
RZ_CORE_WRITE_OP_OR, ///< Write the bitwise-or of existing byte and argument value
RZ_CORE_WRITE_OP_XOR, ///< Write the bitwise-xor of existing byte and argument value
RZ_CORE_WRITE_OP_SHIFT_LEFT, ///< Write the shift left of existing byte by argument value
RZ_CORE_WRITE_OP_SHIFT_RIGHT, ///< Write the shift right of existing byte and argument value
} RzCoreWriteOp;
typedef bool (*RzCorePluginInit)(RzCore *core);
typedef bool (*RzCorePluginFini)(RzCore *core);
@ -498,6 +513,7 @@ RZ_API int rz_core_write_hexpair(RzCore *core, ut64 addr, const char *pairs);
RZ_API int rz_core_write_assembly(RzCore *core, ut64 addr, RZ_NONNULL const char *instructions);
RZ_API int rz_core_write_assembly_fill(RzCore *core, ut64 addr, RZ_NONNULL const char *instructions);
RZ_API bool rz_core_write_block(RzCore *core, ut64 addr, ut8 *data, size_t len);
RZ_API bool rz_core_write_seq_at(RzCore *core, ut64 addr, ut64 from, ut64 to, ut64 step, int value_size);
RZ_API bool rz_core_shift_block(RzCore *core, ut64 addr, ut64 b_size, st64 dist);
RZ_API void rz_core_autocomplete(RZ_NULLABLE RzCore *core, RzLineCompletion *completion, RzLineBuffer *buf, RzLinePromptType prompt_type);
RZ_API RzLineNSCompletionResult *rz_core_autocomplete_rzshell(RzCore *core, RzLineBuffer *buf, RzLinePromptType prompt_type);
@ -586,12 +602,14 @@ RZ_API bool rz_core_write_at(RzCore *core, ut64 addr, const ut8 *buf, int size);
RZ_API bool rz_core_write_value_at(RzCore *core, ut64 addr, ut64 value, int sz);
RZ_API bool rz_core_write_value_inc_at(RzCore *core, ut64 addr, st64 value, int sz);
RZ_API bool rz_core_write_string_at(RzCore *core, ut64 addr, RZ_NONNULL const char *s);
RZ_API bool rz_core_write_string_zero_at(RzCore *core, ut64 addr, const char *s);
RZ_API bool rz_core_write_string_wide_at(RzCore *core, ut64 addr, const char *s);
RZ_API bool rz_core_write_length_string_at(RzCore *core, ut64 addr, const char *s);
RZ_API bool rz_core_write_base64d_at(RzCore *core, ut64 addr, RZ_NONNULL const char *s);
RZ_API bool rz_core_write_base64_at(RzCore *core, ut64 addr, RZ_NONNULL const char *s);
RZ_API bool rz_core_write_random_at(RzCore *core, ut64 addr, size_t len);
RZ_API int rz_core_write_op(RzCore *core, const char *arg, char op);
RZ_API ut8 *rz_core_transform_op(RzCore *core, const char *arg, char op);
RZ_API bool rz_core_write_block_op_at(RzCore *core, ut64 addr, RzCoreWriteOp op, ut8 *hex, int hexlen);
RZ_API ut8 *rz_core_transform_op(RzCore *core, ut64 addr, RzCoreWriteOp op, ut8 *hex, int hexlen, int *buflen);
RZ_API ut32 rz_core_file_cur_fd(RzCore *core);
RZ_API RzCmdStatus rz_core_io_cache_print(RzCore *core, RzCmdStateOutput *state);
RZ_API RzCmdStatus rz_core_io_pcache_print(RzCore *core, RzIODesc *desc, RzCmdStateOutput *state);

View file

@ -13,14 +13,8 @@ extern "C" {
// For information about the algorithm, see Joe Sawada and Frank Ruskey, "An
// Efficient Algorithm for Generating Necklaces with Fixed Density"
// Generate a cyclic pattern of desired size, and charset, return with starting
// offset of start.
// The returned string is malloced, and it is the responsibility of the caller
// to free the memory.
RZ_API char *rz_debruijn_pattern(int size, int start, const char *charset);
// Finds the offset of a given value in a cyclic pattern of an integer.
RZ_API int rz_debruijn_offset(ut64 value, bool is_big_endian);
RZ_API int rz_debruijn_offset(int start, const char *charset, ut64 value, bool is_big_endian);
#ifdef __cplusplus
}

View file

@ -505,10 +505,18 @@ RZ_API bool rz_io_extend_at(RzIO *io, ut64 addr, ut64 size) {
#undef IO_EXTEND_BLOCK_SZ
}
/**
* \brief Set a mask that is used on all following write operations
*
* \param io Reference to RzIo instance
* \param mask Mask to apply
* \param len Number of bytes in the mask
* \return true if the mask was correctly set, false otherwise
*/
RZ_API bool rz_io_set_write_mask(RzIO *io, const ut8 *mask, int len) {
if (!io || len < 1) {
return false;
}
rz_return_val_if_fail(io, false);
rz_return_val_if_fail(mask || len == 0, false);
free(io->write_mask);
if (!mask) {
io->write_mask = NULL;

View file

@ -349,8 +349,8 @@ RZ_API int rz_main_rz_gg(int argc, const char **argv) {
}
get_offset = rz_num_math(0, sequence);
printf("Little endian: %d\n", rz_debruijn_offset(get_offset, false));
printf("Big endian: %d\n", rz_debruijn_offset(get_offset, true));
printf("Little endian: %d\n", rz_debruijn_offset(0, NULL, get_offset, false));
printf("Big endian: %d\n", rz_debruijn_offset(0, NULL, get_offset, true));
free(sequence);
rz_egg_free(egg);
return 0;

View file

@ -63,78 +63,82 @@ static char *de_bruijn(const char *charset, int order, int maxlen) {
return sequence;
}
// Generate a cyclic pattern of desired size, and charset, return with starting
// offset of start.
// The returned string is malloced, and it is the responsibility of the caller
// to free the memory.
RZ_API char *rz_debruijn_pattern(int size, int start, const char *charset) {
char *pat, *pat2;
ut64 len;
/**
* \brief Generate a cyclic pattern following the Debruijn pattern
*
* Generate a cyclic pattern of desired size, and charset, return with starting
* offset of start.
*
* For example, AAABAACAAD is a sequence of size 10, start 0, charset =
* debruijn_charset.
*
* \param size Size of the string to return
* \param start Starting offset in the Debruijn pattern
* \param charset Set of characters to use to generate the string
* \return String of length \p size allocated on the heap
*/
RZ_API RZ_OWN char *rz_debruijn_pattern(int size, int start, const char *charset) {
rz_return_val_if_fail(size >= 0, NULL);
rz_return_val_if_fail(start >= 0, NULL);
if (!charset) {
charset = debruijn_charset;
}
if (start >= size) {
return (char *)NULL;
}
pat = de_bruijn(charset, 3 /*subsequence length*/, size);
if (!pat) {
return NULL;
}
if (start == 0) {
len = strlen(pat);
if (size != len) {
eprintf("warning: requested pattern of length %d, "
"generated length %" PFMT64d "\n",
size, len);
}
char *pat = de_bruijn(charset, 3, size + start);
if (!pat || start == 0) {
return pat;
}
pat2 = calloc((size - start) + 1, sizeof(char));
char *pat2 = RZ_NEWS0(char, size + 1);
if (!pat2) {
free(pat);
return NULL;
}
strncpy(pat2, pat + start, size - start);
pat2[size - start] = 0;
size_t len = strlen(pat + start);
rz_return_val_if_fail(len <= size, NULL);
strcpy(pat2, pat + start);
free(pat);
len = strlen(pat2);
if (size != len) {
eprintf("warning: requested pattern of length %d, "
"generated length %" PFMT64d "\n",
size, len);
}
return pat2;
}
// Finds the offset of a given value in a cyclic pattern of an integer.
RZ_API int rz_debruijn_offset(ut64 value, bool is_big_endian) {
char *needle, *pattern, buf[9];
/**
* \brief Finds the offset of a given value in a debrujn sequence
*
* \param start Starting offset in the Debruijn pattern
* \param charset Set of characters to use to generate the sequence
* \param value Value to search in the sequence
* \param is_big_endian Endianess of \p value
* \return The offset in the sequence where \p value is found or -1 if not found
*/
RZ_API int rz_debruijn_offset(int start, const char *charset, ut64 value, bool is_big_endian) {
int retval = -1;
char *pch;
// 0x10000 should be long enough. This is how peda works, and nobody complains
// ... but is slow. Optimize for common case.
int lens[2] = { 0x1000, 0x10000 };
int lens[] = { 0x1000, 0x10000, 0x100000 };
int j;
if (value == 0) {
return -1;
}
for (j = 0; j < 2 && retval == -1; j++) {
pattern = rz_debruijn_pattern(lens[j], 0, debruijn_charset);
for (j = 0; j < RZ_ARRAY_SIZE(lens) && retval == -1; j++) {
char *pattern = rz_debruijn_pattern(lens[j], start, charset);
if (!pattern) {
return -1;
}
char buf[9];
buf[8] = '\0';
if (is_big_endian) {
rz_write_be64(buf, value);
} else {
rz_write_le64(buf, value);
}
char *needle;
for (needle = buf; !*needle; needle++) {
/* do nothing here */
}
pch = strstr(pattern, needle);
char *pch = strstr(pattern, needle);
if (pch) {
retval = (int)(size_t)(pch - pattern);
}

View file

@ -4,7 +4,7 @@ FILE==
CMDS=<<EOF
cd `e dir.tmp`
e io.cache=true
"(show_fname fname; wz $0; wtf `prz`; o `prz`; i~file; ij; rm `prz`)"
"(show_fname fname; wz $0; pr `$b` > `prz`; o `prz`; i~file; ij; rm `prz`)"
.(show_fname A\x1b¢\302\200€𝄞\363\240\201\201\\.bin)
.(show_fname B\x1b¢\302\200€𝄞\363\240\201\201\\.bin)
# INVALID FILENAME .(show_fname B\x1b¢\302\200\201€𝄞\363\240\201\201\\.bin)

View file

@ -4,7 +4,7 @@ FILE==
CMDS=<<EOF
cd `e dir.tmp`
e io.cache=true
"(show_fname fname; wz $0; wtf `prz` `$size`; o `prz`; i~file; ij; rm `prz`)"
"(show_fname fname; wz $0; pr `$size` > `prz` ; o `prz`; i~file; ij; rm `prz`)"
.(show_fname A\x1b¢\302\200€𝄞\363\240\201\201\\.bin)
.(show_fname B\x1b¢\302\200€𝄞\363\240\201\201\\.bin)
.(show_fname B\x1b¢\302\200\201€𝄞\363\240\201\201\\.bin)

View file

@ -1939,7 +1939,7 @@ e asm.arch=x86
e asm.bits=32
e asm.bytes=false
s 0x1000
"wz path\"C:\\Program\n"
wz "path\"C:\\Program\n"
f ansi_str
s 0x2000
wa "mov eax, 0x1000"
@ -1950,7 +1950,7 @@ e str.escbslash=false
pd 1
pdJ 1
s 0x3000
"ww path\"C:\\Program\r"
ww "path\"C:\\Program\r"
f wide_str
s 0x4000
wa "mov ebx, 0x3000"

View file

@ -2,7 +2,7 @@ NAME=pf QeQ
FILE==
CMDS=<<EOF
b 256
woe 0x11
woe 0 255 0x11
e cfg.bigendian=false
pf Q
e cfg.bigendian=true

View file

@ -34,7 +34,7 @@ RUN
NAME=psj utf8 (#9064)
FILE==
CMDS=<<EOF
"wz ...\"..<2E><><EFBFBD><EFBFBD>..."
wz "...\"..<2E><><EFBFBD><EFBFBD>..."
psj 13
EOF
EXPECT=<<EOF

View file

@ -3,7 +3,7 @@ FILE=malloc://1024
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
woe 1 255
woe 1 255 255
sd +11
b 8
pxr8

View file

@ -166,11 +166,11 @@ hello
EOF
RUN
NAME=wt
NAME=write to file
FILE==
CMDS=<<EOF
wx 01020304
wt .rz-wt.test 4
pr 4 > .rz-wt.test
p8 4 @ 4
wff .rz-wt.test @ 4
rm .rz-wt.test

View file

@ -2,7 +2,7 @@ NAME=debruijn little endian
FILE==
CMDS=<<EOF
e cfg.bigendian=false
wopO 0x41574141
wD/ 0x41574141
EOF
EXPECT=<<EOF
64
@ -13,17 +13,17 @@ NAME=debruijn big endian
FILE==
CMDS=<<EOF
e cfg.bigendian=true
wopO 0x41574141
wD/ 0x41574141
EOF
EXPECT=<<EOF
65
EOF
RUN
NAME=wopD 0x10 @ 0
NAME=wD 0x10 @ 0
FILE==
CMDS=<<EOF
wopD 0x10 @ 0
wD 0x10 @ 0
p8 0x10
EOF
EXPECT=<<EOF
@ -31,25 +31,17 @@ EXPECT=<<EOF
EOF
RUN
NAME=wopD* 0x10
NAME=wD/ 0x41417641
FILE==
CMDS=wopD* 0x10
EXPECT=<<EOF
wx 41414142414143414144414145414146
EOF
RUN
NAME=wopO 0x41417641
FILE==
CMDS=wopO 0x41417641
CMDS=wD/ 0x41417641
EXPECT=<<EOF
140
EOF
RUN
NAME=wopO 41417641
NAME=wD/ 41417641
FILE==
CMDS=wopO 41417641
CMDS=wD/ 41417641
EXPECT=<<EOF
EOF
RUN

View file

@ -20,7 +20,7 @@ wox 0xabcd@!10
p8 14
EOF
EXPECT=<<EOF
a5cea1c7a2dca2d9a1cf00000000
c3a8c7a1c4bac4bfc7a900000000
EOF
RUN
@ -33,7 +33,7 @@ wox 0xabcdef@!10
ps 14
EOF
EXPECT=<<EOF
helloworld\x00\x00\x00\x00
è\x83Ǣ\x98Ŀ\x83\xcf\x00\x00\x00\x00
EOF
RUN
@ -46,7 +46,7 @@ wox 0xabcdef01@!10
p8 14
EOF
EXPECT=<<EOF
698aa1c76e98a2d96d8b00000000
c3a8836dc4ba8073c7a900000000
EOF
RUN
@ -59,7 +59,7 @@ wox 0xabcdef0102@!10
ps 14
EOF
EXPECT=<<EOF
helloworld\x00\x00\x00\x00
è\x83mmܢ\x9dmf\x00\x00\x00\x00
EOF
RUN
@ -72,7 +72,7 @@ wox 0xabcdef010203@!10
ps 14
EOF
EXPECT=<<EOF
helloworld\x00\x00\x00\x00
è\x83mmtĿ\x83e\x00\x00\x00\x00
EOF
RUN
@ -85,7 +85,7 @@ wox 0xabcdef01020304@!10
ps 14
EOF
EXPECT=<<EOF
helloworld\x00\x00\x00\x00
è\x83mmtk١\x8b\x00\x00\x00\x00
EOF
RUN
@ -98,7 +98,7 @@ wox 0xabcdef0102030405@!10
p8 14
EOF
EXPECT=<<EOF
6d616f6e6e98a2d9696000000000
c3a8836d6d746b77c7a900000000
EOF
RUN
@ -210,7 +210,7 @@ NAME=wo2 on woe
FILE==
CMDS=<<EOF
b 32
woe 1
woe 0 255
wo2
e hex.header=false
px

View file

@ -2,9 +2,9 @@ NAME=unified diff and patch
FILE==
CMDS=<<EOF
b 16
wow 41
wb 41
cu 16 > .p
.wu .p
wu .p
!rm -f .p
b 32
cu 16

View file

@ -232,14 +232,11 @@ EXPECT=<<EOF
EOF
RUN
## "wt" - write to file
# see bug #503
NAME=wt
NAME=write to file 2
FILE==
#bins/pe/b.exe
CMDS=<<EOF
wt a_piece_of_ls_saved_to_PWD 0x400
pr 0x400 > a_piece_of_ls_saved_to_PWD
ls -l a_piece_of_ls_saved_to_PWD~[3]
rm a_piece_of_ls_saved_to_PWD
EOF
@ -247,7 +244,7 @@ EXPECT=<<EOF
1024
EOF
EXPECT_ERR=<<EOF
Dumped 1024 bytes from 0x00000000 into a_piece_of_ls_saved_to_PWD
EOF
RUN

View file

@ -46,7 +46,7 @@ wox 0x10 @ 0
o malloc://0x1000 0x80000 > /dev/null
e io.va=true
b 0x1000
wow 20 @ 0x80000
wb 0x20 @ 0x80000
b 20
p8 @ 0
p8 @ 90

View file

@ -48,7 +48,7 @@ NAME=omp 2
FILE=malloc://3
CMDS=<<EOF
b 3
wow 90
wb 90
p8
o malloc://1 1 rw
p8

View file

@ -1,412 +1,412 @@
"wz SEGA GENESIS (C)SEGA 1995.MARCART. BRADESCO CART. BRADESCO GM 00000001-00W`J " @ 256
"wz JUE NqNq`" @ 432
"wz N^Nu/\aBGHy" @ 20118
"wz !&B@N^NuNV" @ 21316
"wz BEBBBB|\t~\t0\a" @ 23832
"wz N^Nu/\aBG\fG\n" @ 30962
"wz AT&FV0B0+FCLASS=1;+FF=1\r" @ 31092
"wz NMEMORIA CHEIA." @ 31449
"wz SEM PORTADORA" @ 31465
"wz INICIANDO TESTE AGUARDE !!!" @ 31479
"wz LINHA OCUPADA" @ 31507
"wz NAO ATENDE" @ 31521
"wz SEM TOM DISCAGEM" @ 31532
"wz DISCANDO NOVAMENTE" @ 31549
"wz CONEXAO OK !" @ 31568
"wz OPER ABORTADA" @ 31581
"wz ERRO NOVA TENTATIVA" @ 31595
"wz LINHA DESCONECTADA." @ 31615
"wz ERRO DE COMUNICACAO" @ 31651
"wz DADOS INCORRETOS" @ 31671
"wz ENVIANDO DADOS..." @ 31688
"wz RECEBENDO DADOS" @ 31706
"wz FALHA 3 TENTATIVAS" @ 31722
"wz ERRO NOVA TENTATIVA" @ 31741
"wz TIMEOUT DADOS" @ 31761
"wz FINAL RECEPCAO" @ 31775
"wz ERRO DE CHECKSUM" @ 31795
"wz TRANSACAO INEXISTE" @ 31812
"wz DATA,HIST.,DOCTO,VALOR," @ 31831
"wz SALDO VINCULADO" @ 31860
"wz SALDO DISPONIVEL,SALDO VINCULADO,SALDO TOTAL," @ 31885
"wz ERRO CLASS 1 " @ 31949
"wz " @ 31964
"wz SALDO ATUAL " @ 31987
"wz DATA,SALDO TOTAL,DATA,SALDO VINCULADO,DATA,SALDO C/L PROGRAMADO," @ 32003
"wz FALHA DE COMUNICACAO" @ 32068
"wz HOST INOPERANTE" @ 32089
"wz TIMEOUT HOST" @ 32105
"wz ERRO DE COMUNICACAO" @ 32119
"wz AGENCIA FORA DO AR" @ 32139
"wz TRANSMISSAO CANCELADA" @ 32158
"wz SENHA NAO GRAVADA" @ 32180
"wz SENHA INVALIDA" @ 32198
"wz C/C BLOQUEADA" @ 32213
"wz EXTRATO NAO ENCONTRADO" @ 32227
"wz SEM LANCAMENTOS" @ 32250
"wz DIA DE VENCIMENTO INVALIDO" @ 32266
"wz MES DO EXTRATO INVALIDO" @ 32293
"wz FIM DE EXTRATO" @ 32317
"wz AGENCIA INCORRETA" @ 32332
"wz CADASTRO EM ATUALIZACAO" @ 32350
"wz CONTA INEXISTENTE" @ 32374
"wz EXTRATO INEXISTENTE" @ 32392
"wz CARTAO DE CREDITO" @ 32426
"wz LANCAMENTOS FUTUROS" @ 32444
"wz LANCAMENTOS DIA ANTERIOR" @ 32464
"wz F.A.F. FACIL" @ 32489
"wz AT+FCLASS=1\r" @ 32504
"wz AT+FTM=48\r" @ 32547
"wz AT+FTM=24\r" @ 32558
"wz AT+FRM=48\r" @ 32569
"wz AT+FRM=24\r" @ 32580
"wz DIS FRAME OK" @ 32591
"wz ERRO RX FRAME" @ 32604
"wz WAIT DIS FRAME" @ 32650
"wz ERRO:FRAME DIS" @ 32665
"wz ERRO FTH=3" @ 32680
"wz <TCF> TRAINING..." @ 32700
"wz RECEPCAO..." @ 32724
"wz ERRO PROG RX" @ 32827
"wz RECEBENDO DADOS..." @ 32840
"wz TRAINING 4800..." @ 32874
"wz TRAINING 2400..." @ 32891
"wz TRAINING OK" @ 32908
"wz ERRO TRAINING" @ 32920
"wz FALHA:COMUNICACAO" @ 32968
"wz ERRO BLOCO" @ 33016
"wz CONTA OU DIGITO INCORRETO" @ 33027
"wz CODIGO DA AGENCIA INCORRETO" @ 33053
"wz DATA DO CARTAO DE CREDITO INCORRETA" @ 33081
"wz 001002003005010011004020021022030031999040041042043N" @ 33164
"wz xqke_ZUPLGC@<952/-*(&#! " @ 37772
"wz #q#p#s#r#6" @ 38972
"wz !&+05:?DINSX]bg" @ 39925
"wz 3333333333333333333333333333" @ 42834
"wz '()*+,-./012" @ 43375
"wz 3456789:;<=>?@" @ 43401
"wz IJKLMNOPQRST" @ 43455
"wz ijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjk" @ 43535
"wz lmmmmmmmmmmnopq" @ 43615
"wz qstsssnnmmmmmmmmmmu" @ 43647
"wz lmmmmmmmmmmvwxyz{|}~" @ 43695
"wz wmmmmmmmmmu" @ 43743
"wz lmmmᡭw±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅ" @ 43935
"wz lmÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåmu" @ 44015
"wz lmæçèéêëìíîïðñòóôõö÷øùúæû" @ 44095
"wz 'mmmmmmmmu" @ 44385
"wz 'mmmmmmmmu" @ 44465
"wz lmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmu" @ 44495
"wz fffffffffa" @ 45590
"wz faffffffffffa" @ 45687
"wz ffffffffffff" @ 45806
"wz fffffffffffaf" @ 45977
"wz fafffafffafff" @ 46136
"wz ffffffffffffffffffa" @ 46202
"wz ffffffffffffffa" @ 46518
"wz fffafffffa" @ 46574
"wz fffffffffa" @ 46670
"wz fffaffffff" @ 46689
"wz ffafffafffa" @ 46841
"wz ffafffafafffa" @ 46933
"wz fafffafffa" @ 47072
"wz fffffffffa" @ 47169
"wz faffffffffffa" @ 47247
"wz fafffafffa" @ 47440
"wz fffafffffafff" @ 47534
"wz ffffffffffffffff" @ 47598
"wz afafffafffa" @ 47726
"wz ffffffffffffa" @ 48177
"wz fffffffffffaf" @ 48401
"wz fafffafafaf" @ 48464
"wz fafffafffa" @ 48527
"wz ,-./0123456789:;<=543210/.-," @ 57312
"wz >?@ABCDEFGHIJKLMNOPQQRSTULKJIHGFEDCBA@?>VWX" @ 57343
"wz XVYZ[\\]^_`abccbadefgh[ZYVX" @ 57389
"wz ijDkllmnoopqrstluultsvwxyz{|llkDji" @ 57424
"wz CDEFGHIJKL*" @ 58042
"wz MNOPQORSPT*" @ 58062
"wz Z[\\]^_`abcdd9*" @ 58121
"wz efghijklmnopqrstuvwxyz{|}~" @ 58150
"wz '()*+,-./012" @ 58417
"wz 3456789:;<=>?@" @ 58430
"wz AB,CDEFGHIJKLMNOPQRST" @ 58445
"wz QUVWXWYZ[\\]^_R" @ 58467
"wz `abcdefghi!j" @ 58482
"wz opqrstuvwxyz{|\tm" @ 58509
"wz !\"#$%&'()*+,-./m0" @ 58758
"wz 123456789:;<=46\tm" @ 58786
"wz >??@?ABCDEFGH@AI\bm" @ 58811
"wz 123456789:8;" @ 59128
"wz #<=>?@ABC)(D\aEFGHIJKLMNOP" @ 59143
"wz #QRSTUVWRXYZ" @ 59171
"wz ()*+,-./012" @ 59553
"wz 6789:;<=>?@ABCD" @ 59576
"wz fghijklmno_^pqrstuvwxyHz" @ 59703
"wz \"#$%&'()*+,-./0123\"" @ 59953
"wz PWXYZ[\\]QNF^_`abO" @ 60055
"wz PcdefghiQN" @ 60075
"wz !\"#$%&'\"#$()*%+," @ 60267
"wz #$%&'()*+,-./01234$" @ 60665
"wz &'()*+,-./01" @ 61172
"wz 23456789:;<=" @ 61186
"wz >?@>ABCDEF@G" @ 61200
"wz HIJKLJMNOPQR" @ 61214
"wz STUVWUXYZ[\\]" @ 61228
"wz '()*+,-./0" @ 61394
"wz 234567891:" @ 61407
"wz Df33D33JDf" @ 65002
"wz Df33J433Df" @ 66042
"wz Df33D3J3Df" @ 66065
"wz Df334JDJ\b3" @ 66263
"wz Df33J4J4Df" @ 67100
"wz Df33D3J3Df33" @ 67124
"wz Df33JDDJDf33" @ 67300
"wz 3Df33J44JDf" @ 67315
"wz Df33D34JDd" @ 68078
"wz Df33J4D4Df" @ 68091
"wz Df33J43DDf" @ 68133
"wz Df33J4J3Df" @ 68194
"wz 0\t9\t9\t9\t9\n" @ 89740
"wz SUSU355355S53553" @ 91822
"wz 5S5S3UU355U53" @ 92487
"wz U3UU5SS3S3" @ 92515
"wz wwwwwwwwwwwwwwww" @ 93824
"wz wwwwwwwwwwwwwwwwwwwwwwwwwww" @ 93977
"wz wwwqwwwqww" @ 94023
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 94287
"wz wwwqwwwqwwwqwwww" @ 94329
"wz wwwqwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 94360
"wz wwwwwwwwwwwwwwwwwwwwwwqww" @ 94673
"wz wwwwwwwwwww" @ 94709
"wz wwDQwwDQwwwwwqwwwqwwwwwwwwwwww" @ 94726
"wz wwwwwwwwwwwwwwwwwwwwwwwqwwwqwwwqwww" @ 94760
"wz qqဗ焗焗􇝷􇝷􇝷􇝷􇝷" @ 94824
"wz wqwwwqwwww" @ 94928
"wz wwqTwwqTww" @ 95004
"wz DDAQDDDQDDDE" @ 95071
"wz DDDQDDDEDDDDDDDDTDDD" @ 95084
"wz DDEQDDQEDDQDDDE" @ 95164
"wz TDUUDDDDDDDDDADDA" @ 95206
"wz DDATDDATDD" @ 95263
"wz DDDTDDEDDDQDDU" @ 95281
"wz wwwwwwwDQwwDQwwDQwwDQwwDQwwE" @ 95305
"wz wwQwwwQwww" @ 95338
"wz wwwwwwwwwwwwwwwwwwqwwq" @ 95349
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 95383
"wz DDDEDDDDDDDDDDA" @ 95636
"wz DDUUDDDDDDDDU" @ 95684
"wz wwwwwwvwwwf" @ 97409
"wz DDDTDDADDD" @ 97537
"wz DEAQDEATDEATDE" @ 97550
"wz DDQTDDQDDE" @ 97569
"wz vfwwvfwwvfwwvfwwvfwwvfwwvfwwvfwwvfwwvf" @ 97678
"wz ffffffgvfgwffwvfgwvfgwffwwffwvffwvffwvffwvffwvffwvffwvffq" @ 97740
"wz DDDEDDDDDDDDTDDD" @ 97868
"wz DDDADDDDDDDDDDDDTDD" @ 97900
"wz DDEQDDQEDDQDDDE" @ 97944
"wz DDDDDDADDA" @ 97993
"wz DDDTDDEDDDQDDU" @ 98061
"wz wwwwwwwwwwwwwwqwwww" @ 98389
"wz wwwwwwwwwwww" @ 98412
"wz wwqwwwwwwwwwwwwwwwwwww" @ 98473
"wz avafavafawafawqfawqff" @ 98519
"wz wwqqwwqqwww" @ 98835
"wz wwwqwwwqww" @ 98994
"wz wwwwwwwwwwwwww" @ 99041
"wz wwwwwwwwwwwwwwww" @ 99906
"wz wwwwwwwwwwwwwwwwwwwwwwwwwww" @ 100059
"wz wwwqwwwqww" @ 100105
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 100369
"wz wwwqwwwqwwwqwwww" @ 100411
"wz wwwqwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 100442
"wz wwwwwwwwwwwwwwwwwwwwwwqww" @ 100755
"wz wwwwwwwwwww" @ 100791
"wz wwDQwwDQwwwwwqwwwqwwwwwwwwwwww" @ 100808
"wz wwwwwwwwwwwwwwwwwwwwwwwqwwwqwwwqwww" @ 100842
"wz qqဗ焗焗􇝷􇝷􇝷􇝷􇝷" @ 100906
"wz wqwwwqwwww" @ 101010
"wz wwqTwwqTww" @ 101086
"wz DDAQDDDQDDDE" @ 101153
"wz DDDQDDDEDDDDDDDDTDDD" @ 101166
"wz DDEQDDQEDDQDDDE" @ 101246
"wz TDUUDDDDDDDDDADDA" @ 101288
"wz DDATDDATDD" @ 101345
"wz DDDTDDEDDDQDDU" @ 101363
"wz wwwwwwwDQwwDQwwDQwwDQwwDQwwE" @ 101387
"wz wwQwwwQwww" @ 101420
"wz wwwwwwwwwwwwwwwwwwqwwq" @ 101431
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 101465
"wz DDDEDDDDDDDDDDA" @ 101718
"wz DDUUDDDDDDDDU" @ 101766
"wz wwwwwwvwwwf" @ 103487
"wz DDDTDDADDD" @ 103615
"wz DEAQDEATDEATDE" @ 103628
"wz DDQTDDQDDE" @ 103647
"wz vffwvffwvffwvffwvfgwvfgwvfwwvfwfffffgvfgwffwvffwvffwfffwfffvffafaTDf" @ 103723
"wz DDDUDDDDDDDDTDDD" @ 103822
"wz wvffwvffwvffwvffwvffwvffq" @ 104138
"wz DDDADDDDDDDDDDDDTDD" @ 104202
"wz wwwwwwwwwwwwwwqwwww" @ 104499
"wz wwwwwwwwwwww" @ 104522
"wz wwqwwwwwwwwwwwwwwwwwww" @ 104583
"wz avafavafawafawqfawqff" @ 104629
"wz wwqqwwqqwww" @ 104945
"wz wwwqwwwqww" @ 105104
"wz wwwwwwwwwwwwww" @ 105151
"wz wwwwwwwwwwwwwwww" @ 106026
"wz wwwwwwwwwwwwwwwwwwwwwwwwwww" @ 106179
"wz wwwqwwwqww" @ 106225
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 106489
"wz wwwqwwwqwwwqwwww" @ 106531
"wz wwwqwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 106562
"wz wwwwwwwwwwwwwwwwwwwwwwqww" @ 106875
"wz wwwwwwwwwww" @ 106911
"wz wwDQwwDQwwwwwqwwwqwwwwwwwwwwww" @ 106928
"wz wwwwwwwwwwwwwwwwwwwwwwwqwwwqwwwqwww" @ 106962
"wz qqဗ焗焗􇝷􇝷􇝷􇝷􇝷" @ 107026
"wz wqwwwqwwww" @ 107130
"wz wwqTwwqTww" @ 107206
"wz DDAQDDDQDDDE" @ 107273
"wz DDDQDDDEDDDDDDDDTDDD" @ 107286
"wz DDEQDDQEDDQDDDE" @ 107366
"wz TDUUDDDDDDDDDADDA" @ 107408
"wz DDATDDATDD" @ 107465
"wz DDDTDDEDDDQDDU" @ 107483
"wz wwwwwwwDQwwDQwwDQwwDQwwDQwwE" @ 107507
"wz wwQwwwQwww" @ 107540
"wz wwwwwwwwwwwwwwwwwwqwwq" @ 107551
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 107585
"wz DDDEDDDDDDDDDDA" @ 107838
"wz DDUUDDDDDDDDU" @ 107886
"wz wwwwwwvwwwf" @ 109649
"wz DDDTDDADDD" @ 109777
"wz DEAQDEATDEATDE" @ 109790
"wz DDQTDDQDDE" @ 109809
"wz vffwvffwvffwvffwvfgwvfgwvfwwvfwfffffgvfgwffwvffwvffwfffwfffvffafaTDf" @ 109885
"wz DDDUDDDDDDDDTDDD" @ 109984
"wz wvffwvffwvffwvffwvffwvffq" @ 110300
"wz DDDADDDDDDDDDDDDTDD" @ 110364
"wz wwwwwwwwwwwwwwqwwww" @ 110661
"wz wwwwwwwwwwww" @ 110684
"wz wwqwwwwwwwwwwwwwwwwwww" @ 110745
"wz avafavafawafawqfawqff" @ 110791
"wz qwqwqwqwqww" @ 111116
"wz wwwwwwwwwwwwwww" @ 111260
"wz wwwwwwwwwww" @ 111282
"wz wwwwwwwwwwwwwwqwwwqwww" @ 111301
"wz wwwqwwwwwwwwwwww" @ 111432
"wz wwwwwwwwwwwwwww" @ 111449
"wz wwwqwwwqqww" @ 111476
"wz wwwwwwwwwwwwwwww" @ 112234
"wz wwwwwwwwwwwwwwwwwwwwwwwwwww" @ 112387
"wz wwwqwwwqww" @ 112433
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 112697
"wz wwwqwwwqwwwqwwww" @ 112739
"wz wwwqwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 112770
"wz wwwwwwwwwwwwwwwwwwwwwwqww" @ 113083
"wz wwwwwwwwwww" @ 113119
"wz wwDQwwDQwwwwwqwwwqwwwwwwwwwwww" @ 113136
"wz wwwwwwwwwwwwwwwwwwwwwwwqwwwqwwwqwww" @ 113170
"wz qqဗ焗焗􇝷􇝷􇝷􇝷􇝷" @ 113234
"wz wqwwwqwwww" @ 113338
"wz wwqTwwqTww" @ 113414
"wz DDAQDDDQDDDE" @ 113481
"wz DDDQDDDEDDDDDDDDTDDD" @ 113494
"wz DDEQDDQEDDQDDDE" @ 113574
"wz TDUUDDDDDDDDDADDA" @ 113616
"wz DDATDDATDD" @ 113673
"wz DDDTDDEDDDQDDU" @ 113691
"wz wwwwwwwDQwwDQwwDQwwDQwwDQwwE" @ 113715
"wz wwQwwwQwww" @ 113748
"wz wwwwwwwwwwwwwwwwwwqwwq" @ 113759
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 113793
"wz wwwwwwvwwwf" @ 115893
"wz DDDTDDADDD" @ 116021
"wz DEAQDEATDEATDE" @ 116034
"wz DDQTDDQDDE" @ 116053
"wz vfwwvfwwvfwwvfwwvfwwvfwwvfwwvfwwvfwwvf" @ 116162
"wz ffffffgvfgwffwvfgwvfgwffwwffwvffwvffwvffwvffwvffwvffwvffq" @ 116224
"wz DDDEDDDDDDDDTDDD" @ 116352
"wz DDDADDDDDDDDDDDDTDD" @ 116384
"wz DDEQDDQEDDQDDDE" @ 116428
"wz DDDDDDADDA" @ 116477
"wz DDDTDDEDDDQDDU" @ 116545
"wz wwwwwwwwwwwwwwqwwww" @ 116873
"wz wwwwwwwwwwww" @ 116896
"wz wwqwwwwwwwwwwwwwwwwwww" @ 116957
"wz avafavafawafawqfawqff" @ 117003
"wz wqwqwqwqwqwqwqwqww" @ 117321
"wz wwwwwwwwwwwwwww" @ 117600
"wz wwwwwwwwwww" @ 117622
"wz wwwwwwwwwwwwwwqwwwqwww" @ 117641
"wz wwwqwwwwwwwwwwww" @ 117772
"wz wwwwwwwwwwwwwww" @ 117789
"wz wwwqwwwqqww" @ 117816
"wz wwwwwwwwwwww" @ 118910
"wz wwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 118930
"wz wwwwwwwwwwqwwq" @ 119239
"wz wwqwwwqwww" @ 119260
"wz DEwwwwwwwwwwwwww" @ 119288
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 119311
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww|www|" @ 119378
"wz qwwwqwwwqwwwwwwww" @ 119529
"wz TDDDTDDDTDDD" @ 119558
"wz DDEQDDDQDDDE" @ 119587
"wz DUUTDDDDDDDDDDDD" @ 119626
"wz DDDTDDDDDDADDDADDD" @ 119651
"wz DDTDDDDDDDDDDE" @ 119692
"wz wwwwwwwwwwwwwwww" @ 119834
"wz 7qTDDqTDDw" @ 119865
"wz wwwwwwwwDDQ" @ 119890
"wz DDEQDDDEDDDDDDDDUDDD" @ 119902
"wz TDDTDDDADDD" @ 119971
"wz DDDTDDEDUUQDDDEDDDQDDDQDDE" @ 119983
"wz wwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 120056
"wz DDDUDDDDTDDDTDDDUUUU" @ 120234
"wz DDDDDDDDDDDDDDDDDDDDDDDDUDDD" @ 120538
"wz DDDDDDDDDDDDUUUU" @ 120622
"wz DDDEDDDEDDDEDDA" @ 120666
"wz DDEQTDDEUUUU" @ 121002
"wz DDDDDDDDDDDDDDADDDD" @ 121759
"wz DDDDDDADDA" @ 121919
"wz QAဘႈ膈膈膈膈膈膈ႁ" @ 122270
"wz DDDDDDADDA" @ 122837
"wz wwwqwwwqwwww" @ 123590
"wz wwwwwwwqwww" @ 123626
"wz wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 123775
"wz DDDDDDDDDDDDDDADDDD" @ 125895
"wz DDDDDDADDA" @ 126055
"wz QAဘႈ膈膈膈膈膈膈ႁ" @ 126406
"wz DDDDDDADDA" @ 126973
"wz DDwqDDwqDD" @ 128042
"wz 333133333333333333333333" @ 129940
"wz 3333333333333333333333333333333333333333333333333333333333333333" @ 130060
"wz 333333333333333333333333333333333333333333333313331333333333333333333333333333333313331333" @ 130145
"wz DDDADDDDDDDADDD" @ 130532
"wz 3333333333333333333333333333333333333333333333333333333333333333" @ 130652
"wz 333333333333333333333333333333333333333333333313331333333333333333333333333333333313331333" @ 130737
"wz DDDADDDDDDDDDDDDDDDDDDDD" @ 131124
"wz 3333333333333333333333333333333333333333333333333333333333333333" @ 131244
"wz 3333333333333333333333333333333333333333DDDADDDADDDDDDDDDDDD" @ 131332
"wz 33333333333333313331333" @ 131396
"wz DDDADDDDDDDDDDDDDDDDDDDD" @ 131716
"wz 3333333333333333333333333333333333333333333333333333333333333333" @ 131836
"wz 3331333333333333DDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 131948
"wz DDDADDDDDDDDDDDDDDDDDDDD" @ 132308
"wz 3333333333333333333333333333333333333333333333333333333333333333" @ 132428
"wz DDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 132553
"wz DDDADDDDDDDDDDDDDDDDDDDD" @ 132900
"wz 3333333333333333333333333331333" @ 133020
"wz DDDDDDDDDDD" @ 133073
"wz DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 133105
"wz DDDADDDDDDDDDDDDDDDDDDDD" @ 133492
"wz 33333333333333333333" @ 133612
"wz DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" @ 133636
"wz DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 133697
"wz DDDADDDDDDDDDDDDDDDDDDDD" @ 134084
"wz DDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" @ 134220
"wz DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 134289
"wz DDDADDDDDDDDDDDDDDDDDDDD" @ 134676
"wz DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" @ 134796
"wz DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 134881
wz "SEGA GENESIS (C)SEGA 1995.MARCART. BRADESCO CART. BRADESCO GM 00000001-00W\`J " @ 256
wz " JUE NqNq\`" @ 432
wz "N^Nu/\aBGHy" @ 20118
wz "!&B@N^NuNV" @ 21316
wz "BEBBBB|\t~\t0\a" @ 23832
wz "N^Nu/\aBG\fG\n" @ 30962
wz "AT&FV0B0+FCLASS=1;+FF=1\r" @ 31092
wz "NMEMORIA CHEIA." @ 31449
wz "SEM PORTADORA" @ 31465
wz "INICIANDO TESTE AGUARDE !!!" @ 31479
wz "LINHA OCUPADA" @ 31507
wz "NAO ATENDE" @ 31521
wz "SEM TOM DISCAGEM" @ 31532
wz "DISCANDO NOVAMENTE" @ 31549
wz "CONEXAO OK !" @ 31568
wz "OPER ABORTADA" @ 31581
wz "ERRO NOVA TENTATIVA" @ 31595
wz "LINHA DESCONECTADA." @ 31615
wz "ERRO DE COMUNICACAO" @ 31651
wz "DADOS INCORRETOS" @ 31671
wz "ENVIANDO DADOS..." @ 31688
wz "RECEBENDO DADOS" @ 31706
wz "FALHA 3 TENTATIVAS" @ 31722
wz "ERRO NOVA TENTATIVA" @ 31741
wz "TIMEOUT DADOS" @ 31761
wz "FINAL RECEPCAO" @ 31775
wz "ERRO DE CHECKSUM" @ 31795
wz "TRANSACAO INEXISTE" @ 31812
wz "DATA,HIST.,DOCTO,VALOR," @ 31831
wz "SALDO VINCULADO" @ 31860
wz "SALDO DISPONIVEL,SALDO VINCULADO,SALDO TOTAL," @ 31885
wz " ERRO CLASS 1 " @ 31949
wz " " @ 31964
wz "SALDO ATUAL " @ 31987
wz "DATA,SALDO TOTAL,DATA,SALDO VINCULADO,DATA,SALDO C/L PROGRAMADO," @ 32003
wz "FALHA DE COMUNICACAO" @ 32068
wz "HOST INOPERANTE" @ 32089
wz "TIMEOUT HOST" @ 32105
wz "ERRO DE COMUNICACAO" @ 32119
wz "AGENCIA FORA DO AR" @ 32139
wz "TRANSMISSAO CANCELADA" @ 32158
wz "SENHA NAO GRAVADA" @ 32180
wz "SENHA INVALIDA" @ 32198
wz "C/C BLOQUEADA" @ 32213
wz "EXTRATO NAO ENCONTRADO" @ 32227
wz "SEM LANCAMENTOS" @ 32250
wz "DIA DE VENCIMENTO INVALIDO" @ 32266
wz "MES DO EXTRATO INVALIDO" @ 32293
wz "FIM DE EXTRATO" @ 32317
wz "AGENCIA INCORRETA" @ 32332
wz "CADASTRO EM ATUALIZACAO" @ 32350
wz "CONTA INEXISTENTE" @ 32374
wz "EXTRATO INEXISTENTE" @ 32392
wz "CARTAO DE CREDITO" @ 32426
wz "LANCAMENTOS FUTUROS" @ 32444
wz "LANCAMENTOS DIA ANTERIOR" @ 32464
wz " F.A.F. FACIL" @ 32489
wz "AT+FCLASS=1\r" @ 32504
wz "AT+FTM=48\r" @ 32547
wz "AT+FTM=24\r" @ 32558
wz "AT+FRM=48\r" @ 32569
wz "AT+FRM=24\r" @ 32580
wz "DIS FRAME OK" @ 32591
wz "ERRO RX FRAME" @ 32604
wz "WAIT DIS FRAME" @ 32650
wz "ERRO:FRAME DIS" @ 32665
wz "ERRO FTH=3" @ 32680
wz "<TCF> TRAINING..." @ 32700
wz "RECEPCAO..." @ 32724
wz "ERRO PROG RX" @ 32827
wz "RECEBENDO DADOS..." @ 32840
wz "TRAINING 4800..." @ 32874
wz "TRAINING 2400..." @ 32891
wz "TRAINING OK" @ 32908
wz "ERRO TRAINING" @ 32920
wz "FALHA:COMUNICACAO" @ 32968
wz "ERRO BLOCO" @ 33016
wz "CONTA OU DIGITO INCORRETO" @ 33027
wz "CODIGO DA AGENCIA INCORRETO" @ 33053
wz "DATA DO CARTAO DE CREDITO INCORRETA" @ 33081
wz "001002003005010011004020021022030031999040041042043N" @ 33164
wz "xqke_ZUPLGC@<952/-*(&#! " @ 37772
wz "#q#p#s#r#6" @ 38972
wz " !&+05:?DINSX]bg" @ 39925
wz "3333333333333333333333333333" @ 42834
wz "'()*+,-./012" @ 43375
wz "3456789:;<=>?@" @ 43401
wz "IJKLMNOPQRST" @ 43455
wz "ijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjk" @ 43535
wz "lmmmmmmmmmmnopq" @ 43615
wz "qstsssnnmmmmmmmmmmu" @ 43647
wz "lmmmmmmmmmmvwxyz{|}~" @ 43695
wz "wmmmmmmmmmu" @ 43743
wz "lmmmᡭw±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅ" @ 43935
wz "lmÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåmu" @ 44015
wz "lmæçèéêëìíîïðñòóôõö÷øùúæû" @ 44095
wz "'mmmmmmmmu" @ 44385
wz "'mmmmmmmmu" @ 44465
wz "lmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmu" @ 44495
wz "fffffffffa" @ 45590
wz "faffffffffffa" @ 45687
wz "ffffffffffff" @ 45806
wz "fffffffffffaf" @ 45977
wz "fafffafffafff" @ 46136
wz "ffffffffffffffffffa" @ 46202
wz "ffffffffffffffa" @ 46518
wz "fffafffffa" @ 46574
wz "fffffffffa" @ 46670
wz "fffaffffff" @ 46689
wz "ffafffafffa" @ 46841
wz "ffafffafafffa" @ 46933
wz "fafffafffa" @ 47072
wz "fffffffffa" @ 47169
wz "faffffffffffa" @ 47247
wz "fafffafffa" @ 47440
wz "fffafffffafff" @ 47534
wz "ffffffffffffffff" @ 47598
wz "afafffafffa" @ 47726
wz "ffffffffffffa" @ 48177
wz "fffffffffffaf" @ 48401
wz "fafffafafaf" @ 48464
wz "fafffafffa" @ 48527
wz ",-./0123456789:;<=543210/.-," @ 57312
wz ">?@ABCDEFGHIJKLMNOPQQRSTULKJIHGFEDCBA@?>VWX" @ 57343
wz "XVYZ[\\]^_\`abccbadefgh[ZYVX" @ 57389
wz "ijDkllmnoopqrstluultsvwxyz{|llkDji" @ 57424
wz "CDEFGHIJKL*" @ 58042
wz "MNOPQORSPT*" @ 58062
wz "Z[\\]^_\`abcdd9*" @ 58121
wz "efghijklmnopqrstuvwxyz{|}~" @ 58150
wz "'()*+,-./012" @ 58417
wz "3456789:;<=>?@" @ 58430
wz "AB,CDEFGHIJKLMNOPQRST" @ 58445
wz "QUVWXWYZ[\\]^_R" @ 58467
wz "\`abcdefghi!j" @ 58482
wz "opqrstuvwxyz{|\tm" @ 58509
wz " !\"#$%&'()*+,-./m0" @ 58758
wz "123456789:;<=46\tm" @ 58786
wz ">??@?ABCDEFGH@AI\bm" @ 58811
wz "123456789:8;" @ 59128
wz "#<=>?@ABC)(D\aEFGHIJKLMNOP" @ 59143
wz "#QRSTUVWRXYZ" @ 59171
wz "()*+,-./012" @ 59553
wz "6789:;<=>?@ABCD" @ 59576
wz "fghijklmno_^pqrstuvwxyHz" @ 59703
wz "\"#$%&'()*+,-./0123\"" @ 59953
wz "PWXYZ[\\]QNF^_\`abO" @ 60055
wz "PcdefghiQN" @ 60075
wz " !\"#$%&'\"#\$()*%+," @ 60267
wz "#$%&'()*+,-./01234$" @ 60665
wz "&'()*+,-./01" @ 61172
wz "23456789:;<=" @ 61186
wz ">?@>ABCDEF@G" @ 61200
wz "HIJKLJMNOPQR" @ 61214
wz "STUVWUXYZ[\\]" @ 61228
wz "'()*+,-./0" @ 61394
wz "234567891:" @ 61407
wz "Df33D33JDf" @ 65002
wz "Df33J433Df" @ 66042
wz "Df33D3J3Df" @ 66065
wz "Df334JDJ\b3" @ 66263
wz "Df33J4J4Df" @ 67100
wz "Df33D3J3Df33" @ 67124
wz "Df33JDDJDf33" @ 67300
wz "3Df33J44JDf" @ 67315
wz "Df33D34JDd" @ 68078
wz "Df33J4D4Df" @ 68091
wz "Df33J43DDf" @ 68133
wz "Df33J4J3Df" @ 68194
wz "0\t9\t9\t9\t9\n" @ 89740
wz "SUSU355355S53553" @ 91822
wz "5S5S3UU355U53" @ 92487
wz "U3UU5SS3S3" @ 92515
wz "wwwwwwwwwwwwwwww" @ 93824
wz "wwwwwwwwwwwwwwwwwwwwwwwwwww" @ 93977
wz "wwwqwwwqww" @ 94023
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 94287
wz "wwwqwwwqwwwqwwww" @ 94329
wz "wwwqwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 94360
wz "wwwwwwwwwwwwwwwwwwwwwwqww" @ 94673
wz "wwwwwwwwwww" @ 94709
wz "wwDQwwDQwwwwwqwwwqwwwwwwwwwwww" @ 94726
wz "wwwwwwwwwwwwwwwwwwwwwwwqwwwqwwwqwww" @ 94760
wz "qqဗ焗焗􇝷􇝷􇝷􇝷􇝷" @ 94824
wz "wqwwwqwwww" @ 94928
wz "wwqTwwqTww" @ 95004
wz "DDAQDDDQDDDE" @ 95071
wz "DDDQDDDEDDDDDDDDTDDD" @ 95084
wz "DDEQDDQEDDQDDDE" @ 95164
wz "TDUUDDDDDDDDDADDA" @ 95206
wz "DDATDDATDD" @ 95263
wz "DDDTDDEDDDQDDU" @ 95281
wz "wwwwwwwDQwwDQwwDQwwDQwwDQwwE" @ 95305
wz "wwQwwwQwww" @ 95338
wz "wwwwwwwwwwwwwwwwwwqwwq" @ 95349
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 95383
wz "DDDEDDDDDDDDDDA" @ 95636
wz "DDUUDDDDDDDDU" @ 95684
wz "wwwwwwvwwwf" @ 97409
wz "DDDTDDADDD" @ 97537
wz "DEAQDEATDEATDE" @ 97550
wz "DDQTDDQDDE" @ 97569
wz "vfwwvfwwvfwwvfwwvfwwvfwwvfwwvfwwvfwwvf" @ 97678
wz "ffffffgvfgwffwvfgwvfgwffwwffwvffwvffwvffwvffwvffwvffwvffq" @ 97740
wz "DDDEDDDDDDDDTDDD" @ 97868
wz "DDDADDDDDDDDDDDDTDD" @ 97900
wz "DDEQDDQEDDQDDDE" @ 97944
wz "DDDDDDADDA" @ 97993
wz "DDDTDDEDDDQDDU" @ 98061
wz "wwwwwwwwwwwwwwqwwww" @ 98389
wz "wwwwwwwwwwww" @ 98412
wz "wwqwwwwwwwwwwwwwwwwwww" @ 98473
wz "avafavafawafawqfawqff" @ 98519
wz "wwqqwwqqwww" @ 98835
wz "wwwqwwwqww" @ 98994
wz "wwwwwwwwwwwwww" @ 99041
wz "wwwwwwwwwwwwwwww" @ 99906
wz "wwwwwwwwwwwwwwwwwwwwwwwwwww" @ 100059
wz "wwwqwwwqww" @ 100105
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 100369
wz "wwwqwwwqwwwqwwww" @ 100411
wz "wwwqwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 100442
wz "wwwwwwwwwwwwwwwwwwwwwwqww" @ 100755
wz "wwwwwwwwwww" @ 100791
wz "wwDQwwDQwwwwwqwwwqwwwwwwwwwwww" @ 100808
wz "wwwwwwwwwwwwwwwwwwwwwwwqwwwqwwwqwww" @ 100842
wz "qqဗ焗焗􇝷􇝷􇝷􇝷􇝷" @ 100906
wz "wqwwwqwwww" @ 101010
wz "wwqTwwqTww" @ 101086
wz "DDAQDDDQDDDE" @ 101153
wz "DDDQDDDEDDDDDDDDTDDD" @ 101166
wz "DDEQDDQEDDQDDDE" @ 101246
wz "TDUUDDDDDDDDDADDA" @ 101288
wz "DDATDDATDD" @ 101345
wz "DDDTDDEDDDQDDU" @ 101363
wz "wwwwwwwDQwwDQwwDQwwDQwwDQwwE" @ 101387
wz "wwQwwwQwww" @ 101420
wz "wwwwwwwwwwwwwwwwwwqwwq" @ 101431
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 101465
wz "DDDEDDDDDDDDDDA" @ 101718
wz "DDUUDDDDDDDDU" @ 101766
wz "wwwwwwvwwwf" @ 103487
wz "DDDTDDADDD" @ 103615
wz "DEAQDEATDEATDE" @ 103628
wz "DDQTDDQDDE" @ 103647
wz "vffwvffwvffwvffwvfgwvfgwvfwwvfwfffffgvfgwffwvffwvffwfffwfffvffafaTDf" @ 103723
wz "DDDUDDDDDDDDTDDD" @ 103822
wz "wvffwvffwvffwvffwvffwvffq" @ 104138
wz "DDDADDDDDDDDDDDDTDD" @ 104202
wz "wwwwwwwwwwwwwwqwwww" @ 104499
wz "wwwwwwwwwwww" @ 104522
wz "wwqwwwwwwwwwwwwwwwwwww" @ 104583
wz "avafavafawafawqfawqff" @ 104629
wz "wwqqwwqqwww" @ 104945
wz "wwwqwwwqww" @ 105104
wz "wwwwwwwwwwwwww" @ 105151
wz "wwwwwwwwwwwwwwww" @ 106026
wz "wwwwwwwwwwwwwwwwwwwwwwwwwww" @ 106179
wz "wwwqwwwqww" @ 106225
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 106489
wz "wwwqwwwqwwwqwwww" @ 106531
wz "wwwqwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 106562
wz "wwwwwwwwwwwwwwwwwwwwwwqww" @ 106875
wz "wwwwwwwwwww" @ 106911
wz "wwDQwwDQwwwwwqwwwqwwwwwwwwwwww" @ 106928
wz "wwwwwwwwwwwwwwwwwwwwwwwqwwwqwwwqwww" @ 106962
wz "qqဗ焗焗􇝷􇝷􇝷􇝷􇝷" @ 107026
wz "wqwwwqwwww" @ 107130
wz "wwqTwwqTww" @ 107206
wz "DDAQDDDQDDDE" @ 107273
wz "DDDQDDDEDDDDDDDDTDDD" @ 107286
wz "DDEQDDQEDDQDDDE" @ 107366
wz "TDUUDDDDDDDDDADDA" @ 107408
wz "DDATDDATDD" @ 107465
wz "DDDTDDEDDDQDDU" @ 107483
wz "wwwwwwwDQwwDQwwDQwwDQwwDQwwE" @ 107507
wz "wwQwwwQwww" @ 107540
wz "wwwwwwwwwwwwwwwwwwqwwq" @ 107551
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 107585
wz "DDDEDDDDDDDDDDA" @ 107838
wz "DDUUDDDDDDDDU" @ 107886
wz "wwwwwwvwwwf" @ 109649
wz "DDDTDDADDD" @ 109777
wz "DEAQDEATDEATDE" @ 109790
wz "DDQTDDQDDE" @ 109809
wz "vffwvffwvffwvffwvfgwvfgwvfwwvfwfffffgvfgwffwvffwvffwfffwfffvffafaTDf" @ 109885
wz "DDDUDDDDDDDDTDDD" @ 109984
wz "wvffwvffwvffwvffwvffwvffq" @ 110300
wz "DDDADDDDDDDDDDDDTDD" @ 110364
wz "wwwwwwwwwwwwwwqwwww" @ 110661
wz "wwwwwwwwwwww" @ 110684
wz "wwqwwwwwwwwwwwwwwwwwww" @ 110745
wz "avafavafawafawqfawqff" @ 110791
wz "qwqwqwqwqww" @ 111116
wz "wwwwwwwwwwwwwww" @ 111260
wz "wwwwwwwwwww" @ 111282
wz "wwwwwwwwwwwwwwqwwwqwww" @ 111301
wz "wwwqwwwwwwwwwwww" @ 111432
wz "wwwwwwwwwwwwwww" @ 111449
wz "wwwqwwwqqww" @ 111476
wz "wwwwwwwwwwwwwwww" @ 112234
wz "wwwwwwwwwwwwwwwwwwwwwwwwwww" @ 112387
wz "wwwqwwwqww" @ 112433
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 112697
wz "wwwqwwwqwwwqwwww" @ 112739
wz "wwwqwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 112770
wz "wwwwwwwwwwwwwwwwwwwwwwqww" @ 113083
wz "wwwwwwwwwww" @ 113119
wz "wwDQwwDQwwwwwqwwwqwwwwwwwwwwww" @ 113136
wz "wwwwwwwwwwwwwwwwwwwwwwwqwwwqwwwqwww" @ 113170
wz "qqဗ焗焗􇝷􇝷􇝷􇝷􇝷" @ 113234
wz "wqwwwqwwww" @ 113338
wz "wwqTwwqTww" @ 113414
wz "DDAQDDDQDDDE" @ 113481
wz "DDDQDDDEDDDDDDDDTDDD" @ 113494
wz "DDEQDDQEDDQDDDE" @ 113574
wz "TDUUDDDDDDDDDADDA" @ 113616
wz "DDATDDATDD" @ 113673
wz "DDDTDDEDDDQDDU" @ 113691
wz "wwwwwwwDQwwDQwwDQwwDQwwDQwwE" @ 113715
wz "wwQwwwQwww" @ 113748
wz "wwwwwwwwwwwwwwwwwwqwwq" @ 113759
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 113793
wz "wwwwwwvwwwf" @ 115893
wz "DDDTDDADDD" @ 116021
wz "DEAQDEATDEATDE" @ 116034
wz "DDQTDDQDDE" @ 116053
wz "vfwwvfwwvfwwvfwwvfwwvfwwvfwwvfwwvfwwvf" @ 116162
wz "ffffffgvfgwffwvfgwvfgwffwwffwvffwvffwvffwvffwvffwvffwvffq" @ 116224
wz "DDDEDDDDDDDDTDDD" @ 116352
wz "DDDADDDDDDDDDDDDTDD" @ 116384
wz "DDEQDDQEDDQDDDE" @ 116428
wz "DDDDDDADDA" @ 116477
wz "DDDTDDEDDDQDDU" @ 116545
wz "wwwwwwwwwwwwwwqwwww" @ 116873
wz "wwwwwwwwwwww" @ 116896
wz "wwqwwwwwwwwwwwwwwwwwww" @ 116957
wz "avafavafawafawqfawqff" @ 117003
wz "wqwqwqwqwqwqwqwqww" @ 117321
wz "wwwwwwwwwwwwwww" @ 117600
wz "wwwwwwwwwww" @ 117622
wz "wwwwwwwwwwwwwwqwwwqwww" @ 117641
wz "wwwqwwwwwwwwwwww" @ 117772
wz "wwwwwwwwwwwwwww" @ 117789
wz "wwwqwwwqqww" @ 117816
wz "wwwwwwwwwwww" @ 118910
wz "wwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 118930
wz "wwwwwwwwwwqwwq" @ 119239
wz "wwqwwwqwww" @ 119260
wz "DEwwwwwwwwwwwwww" @ 119288
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 119311
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww|www|" @ 119378
wz "qwwwqwwwqwwwwwwww" @ 119529
wz "TDDDTDDDTDDD" @ 119558
wz "DDEQDDDQDDDE" @ 119587
wz "DUUTDDDDDDDDDDDD" @ 119626
wz "DDDTDDDDDDADDDADDD" @ 119651
wz "DDTDDDDDDDDDDE" @ 119692
wz "wwwwwwwwwwwwwwww" @ 119834
wz "7qTDDqTDDw" @ 119865
wz "wwwwwwwwDDQ" @ 119890
wz "DDEQDDDEDDDDDDDDUDDD" @ 119902
wz "TDDTDDDADDD" @ 119971
wz "DDDTDDEDUUQDDDEDDDQDDDQDDE" @ 119983
wz "wwwwwwwwwwwwwwwwwwwwwwwwwqwwq" @ 120056
wz "DDDUDDDDTDDDTDDDUUUU" @ 120234
wz "DDDDDDDDDDDDDDDDDDDDDDDDUDDD" @ 120538
wz "DDDDDDDDDDDDUUUU" @ 120622
wz "DDDEDDDEDDDEDDA" @ 120666
wz "DDEQTDDEUUUU" @ 121002
wz "DDDDDDDDDDDDDDADDDD" @ 121759
wz "DDDDDDADDA" @ 121919
wz "QAဘႈ膈膈膈膈膈膈ႁ" @ 122270
wz "DDDDDDADDA" @ 122837
wz "wwwqwwwqwwww" @ 123590
wz "wwwwwwwqwww" @ 123626
wz "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww" @ 123775
wz "DDDDDDDDDDDDDDADDDD" @ 125895
wz "DDDDDDADDA" @ 126055
wz "QAဘႈ膈膈膈膈膈膈ႁ" @ 126406
wz "DDDDDDADDA" @ 126973
wz "DDwqDDwqDD" @ 128042
wz "333133333333333333333333" @ 129940
wz "3333333333333333333333333333333333333333333333333333333333333333" @ 130060
wz "333333333333333333333333333333333333333333333313331333333333333333333333333333333313331333" @ 130145
wz "DDDADDDDDDDADDD" @ 130532
wz "3333333333333333333333333333333333333333333333333333333333333333" @ 130652
wz "333333333333333333333333333333333333333333333313331333333333333333333333333333333313331333" @ 130737
wz "DDDADDDDDDDDDDDDDDDDDDDD" @ 131124
wz "3333333333333333333333333333333333333333333333333333333333333333" @ 131244
wz "3333333333333333333333333333333333333333DDDADDDADDDDDDDDDDDD" @ 131332
wz "33333333333333313331333" @ 131396
wz "DDDADDDDDDDDDDDDDDDDDDDD" @ 131716
wz "3333333333333333333333333333333333333333333333333333333333333333" @ 131836
wz "3331333333333333DDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 131948
wz "DDDADDDDDDDDDDDDDDDDDDDD" @ 132308
wz "3333333333333333333333333333333333333333333333333333333333333333" @ 132428
wz "DDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 132553
wz "DDDADDDDDDDDDDDDDDDDDDDD" @ 132900
wz "3333333333333333333333333331333" @ 133020
wz "DDDDDDDDDDD" @ 133073
wz "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 133105
wz "DDDADDDDDDDDDDDDDDDDDDDD" @ 133492
wz "33333333333333333333" @ 133612
wz "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" @ 133636
wz "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 133697
wz "DDDADDDDDDDDDDDDDDDDDDDD" @ 134084
wz "DDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" @ 134220
wz "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 134289
wz "DDDADDDDDDDDDDDDDDDDDDDD" @ 134676
wz "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" @ 134796
wz "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDADDD" @ 134881

View file

@ -7,17 +7,24 @@
bool test_rz_debruijn_pattern(void) {
char *pattern = rz_debruijn_pattern(256, 0, NULL /*default charset*/);
mu_assert_eq((int)strlen(pattern), 256, "pattern length");
mu_assert_streq(pattern, "AAABAACAADAAEAAFAAGAAHAAIAAJAAKAALAAMAANAAOAAPAAQAARAASAATAAUAAVAAWAAXAAYAAZAAaAAbAAcAAdAAeAAfAAgAAhAAiAAjAAkAAlAAmAAnAAoAApAAqAArAAsAAtAAuAAvAAwAAxAAyAAzAA1AA2AA3AA4AA5AA6AA7AA8AA9AA0ABBABCABDABEABFABGABHABIABJABKABLABMABNABOABPABQABRABSABTABUABVABWABXABY", "pattern of 256 length");
free(pattern);
mu_assert_streq_free(pattern, "AAABAACAADAAEAAFAAGAAHAAIAAJAAKAALAAMAANAAOAAPAAQAARAASAATAAUAAVAAWAAXAAYAAZAAaAAbAAcAAdAAeAAfAAgAAhAAiAAjAAkAAlAAmAAnAAoAApAAqAArAAsAAtAAuAAvAAwAAxAAyAAzAA1AA2AA3AA4AA5AA6AA7AA8AA9AA0ABBABCABDABEABFABGABHABIABJABKABLABMABNABOABPABQABRABSABTABUABVABWABXABY", "pattern of 256 length");
pattern = rz_debruijn_pattern(10, 2, "12345");
mu_assert_eq((int)strlen(pattern), 10, "pattern length");
eprintf("pattern = '%s'\n", pattern);
mu_assert_streq_free(pattern, "1211311411", "pattern of length 10");
mu_end;
}
bool test_rz_debruijn_offset(void) {
// From ropasaurusrex.
ut64 offset = 0x41417641;
mu_assert_eq(rz_debruijn_offset(offset, false /*little endian*/), 140, "debruijn offset - little endian");
mu_assert_eq(rz_debruijn_offset(0, NULL, offset, false), 140, "debruijn offset - little endian");
offset = 0x41764141;
mu_assert_eq(rz_debruijn_offset(offset, true /*big endian*/), 140, "debruijn offset - big endian");
mu_assert_eq(rz_debruijn_offset(0, NULL, offset, true), 140, "debruijn offset - big endian");
offset = 0x31313331;
mu_assert_eq(rz_debruijn_offset(2, "12345", offset, true), 2, "debruijn offset - big endian");
offset = 0x31313331;
mu_assert_eq(rz_debruijn_offset(2, "12345", offset, false), 3, "debruijn offset - little endian");
mu_end;
}
@ -27,4 +34,4 @@ int all_tests() {
return tests_passed != tests_run;
}
mu_main(all_tests)
mu_main(all_tests)

View file

@ -40,8 +40,29 @@ bool test_file_slurp(void) {
mu_end;
}
bool test_endian(void) {
ut8 buf[8];
rz_write_be16(buf, 0x1122);
mu_assert_memeq((ut8 *)"\x11\x22", buf, 2, "be16");
rz_write_le16(buf, 0x1122);
mu_assert_memeq((ut8 *)"\x22\x11", buf, 2, "le16");
rz_write_be32(buf, 0x11223344);
mu_assert_memeq((ut8 *)"\x11\x22\x33\x44", buf, 4, "be32");
rz_write_le32(buf, 0x11223344);
mu_assert_memeq((ut8 *)"\x44\x33\x22\x11", buf, 4, "le32");
rz_write_ble(buf, 0x1122, true, 16);
mu_assert_memeq((ut8 *)"\x11\x22", buf, 2, "ble 16 true");
rz_write_ble(buf, 0x1122, false, 16);
mu_assert_memeq((ut8 *)"\x22\x11", buf, 2, "ble 16 false");
mu_end;
}
int all_tests() {
mu_run_test(test_file_slurp);
mu_run_test(test_endian);
return tests_passed != tests_run;
}