Fix last covs
This commit is contained in:
parent
7354a63372
commit
19b41bec5c
5 changed files with 44 additions and 19 deletions
|
|
@ -13,7 +13,7 @@ static int dalvik_disassemble (RAsm *a, RAsmOp *op, const ut8 *buf, int len) {
|
|||
if (!a || !op || !buf || len < 1) {
|
||||
return -1;
|
||||
}
|
||||
int vA, vB, vC, payload = 0, i = (int) buf? buf[0]: 0;
|
||||
int vA, vB, vC, payload = 0, i = (int) buf[0];
|
||||
int size = dalvik_opcodes[i].len;
|
||||
char str[1024], *strasm;
|
||||
ut64 offset;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ static int disassemble(RAsm *a, RAsmOp *op, const ut8 *buf, int len) {
|
|||
EvmOp eop = {0};
|
||||
evm_dis (&eop, buf, len);
|
||||
strncpy (op->buf_asm, eop.txt, sizeof (op->buf_asm));
|
||||
op->buf_asm[sizeof (op->buf_asm) - 1] = 0;
|
||||
op->size = eop.len;
|
||||
return eop.len;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1903,6 +1903,7 @@ static void cmd_debug_reg(RCore *core, const char *str) {
|
|||
case '*':
|
||||
rad = str[1];
|
||||
str++;
|
||||
// fallthrough
|
||||
case ' ':
|
||||
{
|
||||
int role = r_reg_get_name_idx (str+2);
|
||||
|
|
|
|||
|
|
@ -284,6 +284,8 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) {
|
|||
|
||||
fd = r_sandbox_fopen (base_file, "rb");
|
||||
if (!fd) {
|
||||
free (base_file);
|
||||
free (diff_file);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -293,7 +295,8 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) {
|
|||
/* Restore base snapshots */
|
||||
while (true) {
|
||||
base = r_debug_snap_new ();
|
||||
if (!fread (&snapentry, sizeof (RSnapEntry), 1, fd)) {
|
||||
memset (&snapentry, 0, sizeof (RSnapEntry));
|
||||
if (fread (&snapentry, sizeof (RSnapEntry), 1, fd) != 1) {
|
||||
break;
|
||||
}
|
||||
base->addr = snapentry.addr;
|
||||
|
|
@ -302,23 +305,34 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) {
|
|||
base->page_num = base->size / SNAP_PAGE_SIZE;
|
||||
base->timestamp = snapentry.timestamp;
|
||||
base->perm = snapentry.perm;
|
||||
base->data = malloc (base->size);
|
||||
fread (base->data, base->size, 1, fd);
|
||||
base->data = calloc (base->size, 1);
|
||||
if (!base->data) {
|
||||
free (base);
|
||||
break;
|
||||
}
|
||||
if (fread (base->data, base->size, 1, fd) != 1) {
|
||||
free (base);
|
||||
break;
|
||||
}
|
||||
/* restore all hases */
|
||||
base->hashes = R_NEWS0 (ut8 *, base->page_num);
|
||||
for (i = 0; i < base->page_num; i++) {
|
||||
base->hashes[i] = calloc (1, 128);
|
||||
fread (base->hashes[i], 128, 1, fd);
|
||||
if (fread (base->hashes[i], 128, 1, fd) != 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
r_list_append (dbg->snaps, base);
|
||||
}
|
||||
fclose (fd);
|
||||
free (base_file);
|
||||
R_FREE (base_file);
|
||||
|
||||
/* Restore trace sessions */
|
||||
fd = r_sandbox_fopen (diff_file, "rb");
|
||||
R_FREE (diff_file);
|
||||
if (!fd) {
|
||||
free (base->data);
|
||||
free (base);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -330,7 +344,7 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) {
|
|||
|
||||
while (true) {
|
||||
/* Restore session header */
|
||||
if (!fread (&header, sizeof (RSessionHeader), 1, fd)) {
|
||||
if (fread (&header, sizeof (RSessionHeader), 1, fd) != 1) {
|
||||
break;
|
||||
}
|
||||
session = R_NEW0 (RDebugSession);
|
||||
|
|
@ -343,9 +357,13 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) {
|
|||
for (i = 0; i < R_REG_TYPE_LAST; i++) {
|
||||
/* Resotre RReagArena from raw dump*/
|
||||
int arena_size;
|
||||
fread (&arena_size, sizeof (int), 1, fd);
|
||||
arena_raw = malloc (arena_size);
|
||||
fread (arena_raw, arena_size, 1, fd);
|
||||
if (fread (&arena_size, sizeof (int), 1, fd) != 1) {
|
||||
break;
|
||||
}
|
||||
arena_raw = calloc (arena_size, 1);
|
||||
if (fread (arena_raw, arena_size, 1, fd) != 1) {
|
||||
break;
|
||||
}
|
||||
arena = R_NEW0 (RRegArena);
|
||||
arena->bytes = arena_raw;
|
||||
arena->size = arena_size;
|
||||
|
|
@ -359,10 +377,12 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) {
|
|||
}
|
||||
/* Restore diff entries */
|
||||
for (i = 0; i < header.difflist_len; i++) {
|
||||
fread (&diffentry, sizeof (RDiffEntry), 1, fd);
|
||||
(void)fread (&diffentry, sizeof (RDiffEntry), 1, fd);
|
||||
// eprintf ("diffentry base=%d pages=%d\n", diffentry.base_idx, diffentry.pages_len);
|
||||
snapdiff = R_NEW0 (RDebugSnapDiff);
|
||||
|
||||
if (!snapdiff) {
|
||||
break;
|
||||
}
|
||||
/* Restore diff->base */
|
||||
base = r_idx_to_snap (dbg, diffentry.base_idx);
|
||||
snapdiff->base = base;
|
||||
|
|
@ -379,10 +399,10 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) {
|
|||
ut32 clust_page = R_MIN (SNAP_PAGE_SIZE, base->size);
|
||||
for (p = 0; p < diffentry.pages_len; p++) {
|
||||
page = R_NEW0 (RPageData);
|
||||
page->data = malloc (clust_page);
|
||||
fread (&page->page_off, sizeof (ut32), 1, fd);
|
||||
fread (page->data, SNAP_PAGE_SIZE, 1, fd);
|
||||
fread (page->hash, 128, 1, fd);
|
||||
page->data = calloc (1, clust_page);
|
||||
(void)fread (&page->page_off, sizeof (ut32), 1, fd);
|
||||
(void)fread (page->data, SNAP_PAGE_SIZE, 1, fd);
|
||||
(void)fread (page->hash, 128, 1, fd);
|
||||
snapdiff->last_changes[page->page_off] = page;
|
||||
r_list_append (snapdiff->pages, page);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ RASN1String *r_asn1_create_string (const char *string, bool allocated, ut32 leng
|
|||
if (s) {
|
||||
s->allocated = allocated;
|
||||
s->length = length;
|
||||
s->string = strdup (string);
|
||||
s->string = string;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
|
@ -103,10 +103,13 @@ RASN1String *r_asn1_stringify_utctime (const ut8 *buffer, ut32 length) {
|
|||
}
|
||||
|
||||
RASN1String *r_asn1_stringify_time (const ut8 *buffer, ut32 length) {
|
||||
char str[24];
|
||||
if (!buffer || length != 15 || buffer[14] != 'Z') {
|
||||
return NULL;
|
||||
}
|
||||
char *str = malloc (24);
|
||||
if (!str) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
str[0] = buffer[6];
|
||||
str[1] = buffer[7];
|
||||
|
|
|
|||
Loading…
Reference in a new issue