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:
parent
f4f9471d62
commit
d20b026ce2
29 changed files with 1745 additions and 1738 deletions
|
|
@ -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);
|
||||
|
|
|
|||
499
librz/core/cio.c
499
librz/core/cio.c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue