diff --git a/libr/anal/reflines.c b/libr/anal/reflines.c index d554dc63b5..bf7cee1177 100644 --- a/libr/anal/reflines.c +++ b/libr/anal/reflines.c @@ -1,6 +1,4 @@ -/* radare - LGPL - Copyright 2009-2011 */ -/* nibble<.ds@gmail.com> */ -/* pancake */ +/* radare - LGPL - Copyright 2009-2012 - pancake, nibble */ #include #include diff --git a/libr/core/cmd_debug.c b/libr/core/cmd_debug.c index 7332159004..07075791ca 100644 --- a/libr/core/cmd_debug.c +++ b/libr/core/cmd_debug.c @@ -105,7 +105,7 @@ static void cmd_debug_pid(RCore *core, const char *input) { if (pid > 0) { eprintf ("Sending signal '%d' to pid '%d'\n", sig, pid); r_debug_kill (core->dbg, R_FALSE, sig); - } else eprintf ("Invalid arguments\n"); + } else eprintf ("cmd_debug_pid: Invalid arguments (%s)\n", input); break; case 'n': eprintf ("TODO: debug_fork: %d\n", r_debug_fork (core->dbg)); diff --git a/libr/core/cmd_meta.c b/libr/core/cmd_meta.c index f6bc614b1f..efc638ee1f 100644 --- a/libr/core/cmd_meta.c +++ b/libr/core/cmd_meta.c @@ -122,6 +122,7 @@ static int cmd_meta(void *data, const char *input) { int n = 0, type = input[0]; t = strdup (input+2); if (atoi (t)>0) { + RFlagItem *fi; p = strchr (t, ' '); if (p) { *p = '\0'; @@ -133,14 +134,14 @@ static int cmd_meta(void *data, const char *input) { strncpy (name, t, sizeof (name)-1); r_core_read_at (core, addr, (ut8*)name, sizeof (name)); break; - default: { - RFlagItem *fi = r_flag_get_i (core->flags, addr); - if (fi) strncpy (name, fi->name, sizeof (name)-1); + default: + fi = r_flag_get_i (core->flags, addr); + if (fi) { + strncpy (name, fi->name, sizeof (name)-1); //else sprintf (name, "ptr_%08"PFMT64x"", addr); - else { - eprintf ("Invalid arguments\n"); - return 1; - } + //} else { + // eprintf ("meta: Invalid arguments (%s)\n", input); + // return 1; } } n = atoi (input+1); diff --git a/libr/core/disasm.c b/libr/core/disasm.c index 023d6b787c..5149b5ceab 100644 --- a/libr/core/disasm.c +++ b/libr/core/disasm.c @@ -115,7 +115,6 @@ R_API int r_core_print_disasm(RPrint *p, RCore *core, ut64 addr, ut8 *buf, int l if (r_config_get_i (core->config, "asm.lineswide")) linesopts |= R_ANAL_REFLINE_TYPE_WIDE; lines = 0; - toro: // uhm... is this necesary? imho can be removed r_asm_set_pc (core->assembler, addr+idx); @@ -196,7 +195,8 @@ toro: RAnalFunction *fun = r_anal_fcn_find ( core->anal, refi->addr, R_ANAL_FCN_TYPE_NULL); - r_cons_printf ("%s%s", pre, refline); + r_cons_printf ("%c %s", ((f&&f->type==R_ANAL_FCN_TYPE_FCN) + &&f->addr==at)?' ':'|',refline); if (show_color) r_cons_printf (Color_TURQOISE"; %s XREF 0x%08"PFMT64x" (%s)"Color_RESET"\n", refi->type==R_ANAL_REF_TYPE_CODE?"CODE (JMP)": @@ -365,7 +365,9 @@ toro: /* XXX: This is really cpu consuming.. need to be fixed */ if (show_functions) { if (f) { +//eprintf ("fun 0x%llx 0x%llx\n", at, f->addr+f->size-analop.length); pre = " "; + if (f->addr == at) { char *sign = r_anal_fcn_to_string (core->anal, f); if (f->type == R_ANAL_FCN_TYPE_LOC) { @@ -383,13 +385,17 @@ toro: free (sign); pre = "| "; stackptr = 0; - } else if (f->addr+f->size-analop.length== at) { + } else if (f->addr+f->size-analop.length == at) { r_cons_printf ("\\ "); } else if (at > f->addr && at < f->addr+f->size-1) { r_cons_printf ("| "); pre = "| "; - } else f = NULL; - } else r_cons_printf (" "); + } else { + f = NULL; + } + if (at == f->addr+f->size-analop.length) // HACK + pre = "\\ "; + } else pre = " "; //r_cons_printf (" "); } if (show_flags) { flag = r_flag_get_i (core->flags, at); @@ -399,7 +405,7 @@ toro: if (show_offset) r_cons_printf ("; -------- "); if (show_functions) - r_cons_printf ("%s:\n%s", flag->name, f?"| ":" "); + r_cons_printf ("%s:\n%s", flag->name, f?pre:""); else r_cons_printf ("%s:\n", flag->name); } } diff --git a/libr/core/libs.c b/libr/core/libs.c index a37b43886c..f42ce277a9 100644 --- a/libr/core/libs.c +++ b/libr/core/libs.c @@ -1,4 +1,4 @@ -/* radare - LGPL - Copyright 2009-2012 pancake */ +/* radare - LGPL - Copyright 2009-2012 - pancake */ #include "r_core.h" diff --git a/libr/core/rtr.c b/libr/core/rtr.c index 7b1f0cb12e..92e4d6d43d 100644 --- a/libr/core/rtr.c +++ b/libr/core/rtr.c @@ -1,4 +1,4 @@ -/* radare - Copyright 2009-2012 pancake+nibble */ +/* radare - Copyright 2009-2012 - pancake, nibble */ #include "r_core.h" #include "r_socket.h" diff --git a/libr/db/table.c b/libr/db/table.c index c93523adfc..05e4673d97 100644 --- a/libr/db/table.c +++ b/libr/db/table.c @@ -1,17 +1,7 @@ -/* radare - LGPL - Copyright 2009-2011 pancake */ +/* radare - LGPL - Copyright 2009-2012 - pancake */ #include "r_db.h" #include "r_util.h" -/* -struct r_db_table_t *table = \ - r_db_table_new("cities", "ziu", "name people postal"); -*/ - -#if 0 -/* r_fmt ??? */ -int sizes[256]; -sizes['i'] = 4; -#endif struct r_db_table_t *r_db_table_new(const char *name, const char *fmt, const char *fields) { int i; @@ -20,7 +10,7 @@ struct r_db_table_t *r_db_table_new(const char *name, const char *fmt, const cha table->args = strdup (fields); table->nelems = r_str_word_set0 (table->args); if (table->nelems != strlen (fmt)) { - fprintf(stderr, "Invalid arguments\n"); + eprintf ("r_db_table_new: Invalid arguments\n"); /* XXX: refactor */ free (table->args); free (table); diff --git a/libr/debug/p/debug_native.c b/libr/debug/p/debug_native.c index b934eb2f09..3a282228c3 100644 --- a/libr/debug/p/debug_native.c +++ b/libr/debug/p/debug_native.c @@ -1,4 +1,4 @@ -/* radare - LGPL - Copyright 2009-2012 pancake */ +/* radare - LGPL - Copyright 2009-2012 pancake */ #include #include @@ -169,6 +169,20 @@ ut32[16] #include #include #include + +struct user_regs_struct_x86_64 { + ut64 r15; ut64 r14; ut64 r13; ut64 r12; ut64 rbp; ut64 rbx; ut64 r11; + ut64 r10; ut64 r9; ut64 r8; ut64 rax; ut64 rcx; ut64 rdx; ut64 rsi; + ut64 rdi; ut64 orig_rax; ut64 rip; ut64 cs; ut64 eflags; ut64 rsp; + ut64 ss; ut64 fs_base; ut64 gs_base; ut64 ds; ut64 es; ut64 fs; ut64 gs; +}; + +struct user_regs_struct_x86_32 { + ut32 ebx; ut32 ecx; ut32 edx; ut32 esi; ut32 edi; ut32 ebp; ut32 eax; + ut32 xds; ut32 xes; ut32 xfs; ut32 xgs; ut32 orig_eax; ut32 eip; + ut32 xcs; ut32 eflags; ut32 esp; ut32 xss; +}; + #ifdef __ANDROID__ // #if __arm__ # define R_DEBUG_REG_T struct pt_regs @@ -1456,10 +1470,10 @@ eprintf ("++ EFL = 0x%08x %d\n", ctx.EFlags, r_offsetof (CONTEXT, EFlags)); /* TODO: allow to choose the thread */ gp_count = R_DEBUG_STATE_SZ; -if (tid <0 || tid>=inferior_thread_count) { - eprintf ("Tid out of range %d\n", inferior_thread_count); - return R_FALSE; -} + if (tid <0 || tid>=inferior_thread_count) { + eprintf ("Tid out of range %d\n", inferior_thread_count); + return R_FALSE; + } // XXX: kinda spaguetti coz multi-arch #if __i386__ || __x86_64__ if (dbg->bits== R_SYS_BITS_64) { @@ -1529,7 +1543,27 @@ if (tid <0 || tid>=inferior_thread_count) { ret = ptrace (PTRACE_GETREGS, pid, ®s, NULL); #else /* linux/arm/x86/x64 */ - ret = ptrace (PTRACE_GETREGS, pid, NULL, ®s); + if (dbg->bits & R_SYS_BITS_32) { +// XXX. this is wrong +#if 0 + struct user_regs_struct_x86_64 r64; + ret = ptrace (PTRACE_GETREGS, pid, NULL, &r64); +eprintf (" EIP : 0x%x\n", r32.eip); +eprintf (" ESP : 0x%x\n", r32.esp); +#endif + +#if 0 +int i=0; +unsigned char *p = &r64;; +for(i=0;i< sizeof (r64); i++) { +printf ("%02x ", p[i]); +} +printf ("\n"); +#endif + ret = ptrace (PTRACE_GETREGS, pid, NULL, ®s); + } else { + ret = ptrace (PTRACE_GETREGS, pid, NULL, ®s); + } #endif if (ret != 0) return R_FALSE; @@ -1568,7 +1602,7 @@ static int r_debug_native_reg_write(RDebug *dbg, int type, const ut8* buf, int s } } #else -return R_FALSE; + return R_FALSE; #endif #else eprintf ("TODO: add support for write DRX registers\n"); @@ -1629,14 +1663,14 @@ return R_FALSE; R_DEBUG_STATE_T, (thread_state_t) regs, &gp_count); #endif //if (thread_set_state (inferior_threads[0], R_DEBUG_STATE_T, (thread_state_t) regs, gp_count) != KERN_SUCCESS) { -if (ret != KERN_SUCCESS) { - eprintf ("debug_setregs: Failed to set thread %d %d.error (%x). (%s)\n", - (int)pid, pid_to_task (pid), (int)ret, MACH_ERROR_STRING (ret)); - perror ("thread_set_state"); - return R_FALSE; -} -} else eprintf ("There are no threads!\n"); -return sizeof (R_DEBUG_REG_T); + if (ret != KERN_SUCCESS) { + eprintf ("debug_setregs: Failed to set thread %d %d.error (%x). (%s)\n", + (int)pid, pid_to_task (pid), (int)ret, MACH_ERROR_STRING (ret)); + perror ("thread_set_state"); + return R_FALSE; + } + } else eprintf ("There are no threads!\n"); + return sizeof (R_DEBUG_REG_T); #else #warning r_debug_native_reg_write not implemented #endif diff --git a/libr/io/p/io_debug.c b/libr/io/p/io_debug.c index 071a8b1a98..942ec0f4f9 100644 --- a/libr/io/p/io_debug.c +++ b/libr/io/p/io_debug.c @@ -215,7 +215,7 @@ static int fork_and_ptraceme(int bits, const char *cmd) { eprintf ("Success\n"); break; case 22: - eprintf ("Invalid argument\n"); + eprintf ("posix_spawnp: Invalid argument\n"); break; case 86: eprintf ("Unsupported architecture\n"); @@ -268,6 +268,7 @@ static RIODesc *__open(RIO *io, const char *file, int rw, int mode) { if (__plugin_open (io, file)) { int pid = atoi (file+6); if (pid == 0) { + // TODO: get bits from ELF? pid = fork_and_ptraceme (io->bits, file+6); if (pid==-1) return NULL;