Fixes Thumb detection from CPSR, NULL

This commit is contained in:
pancake 2015-10-31 03:45:14 +01:00
parent d651c626ed
commit 36179944fd
5 changed files with 21 additions and 14 deletions

View File

@ -563,6 +563,7 @@ int main(int argc, char **argv, char **envp) {
r_core_cmd0 (&r, ".dm*");
// Set Thumb Mode if necessary
r_core_cmd0 (&r, "dr? thumb;?? e asm.bits=16");
r_cons_reset ();
}
}
}

View File

@ -5,6 +5,7 @@
static struct r_bp_arch_t r_bp_plugin_arm_bps[] = {
{ 64, 4, 0, (const ut8*)"\xfe\xde\xff\xe7" }, // le - arm64
{ 32, 1, 0, (const ut8*)"\xff\xff\xff\xff" }, // le - linux only? (undefined instruction)
{ 32, 4, 0, (const ut8*)"\x01\x00\x9f\xef" }, // le - linux only? (undefined instruction)
{ 32, 4, 1, (const ut8*)"\xef\x9f\x00\x01" }, // be
#if 0

View File

@ -983,10 +983,10 @@ static void cmd_debug_reg(RCore *core, const char *str) {
const char *name;
char *arg;
switch (str[0]) {
case '-':
case '-': // "dr-"
r_debug_reg_list (core->dbg, R_REG_TYPE_GPR, bits, '-', 0);
break;
case '?':
case '?': // "dr?"
if (str[1]) {
const char *p = str+1;
ut64 off;
@ -1036,7 +1036,7 @@ static void cmd_debug_reg(RCore *core, const char *str) {
r_core_cmd_help (core, help_message);
}
break;
case 'l':
case 'l': // "drl"
//r_core_cmd0 (core, "drp~[1]");
{
RRegSet *rs = r_reg_regset_get (core->dbg->reg, R_REG_TYPE_GPR);
@ -1049,7 +1049,7 @@ static void cmd_debug_reg(RCore *core, const char *str) {
}
}
break;
case 'b':
case 'b': // "drb"
{ // WORK IN PROGRESS // DEBUG COMMAND
int len;
const ut8 *buf = r_reg_get_bytes (core->dbg->reg, R_REG_TYPE_GPR, &len);
@ -1057,7 +1057,7 @@ static void cmd_debug_reg(RCore *core, const char *str) {
r_print_hexdump (core->print, 0LL, buf, len, 32, 4);
}
break;
case 'c':
case 'c': // "drc"
// TODO: set flag values with drc zf=1
{
RRegItem *r;
@ -1102,7 +1102,7 @@ free (rf);
}
}
break;
case 'x':
case 'x': // "drx"
switch (str[1]) {
case '-':
r_debug_reg_sync (core->dbg, R_REG_TYPE_DRX, false);
@ -2340,20 +2340,20 @@ static int cmd_debug_continue (RCore *core, const char *input) {
};
// TODO: we must use this for step 'ds' too maybe...
switch (input[1]) {
case '?':
case '?': // "dc?"
r_core_cmd_help (core, help_message);
return 0;
case 'a':
case 'a': // "dca"
eprintf ("TODO: dca\n");
break;
case 'f':
case 'f': // "dcf"
eprintf ("[+] Running 'dcs vfork' behind the scenes...\n");
// we should stop in fork and vfork syscalls
//TODO: multiple syscalls not handled yet
// r_core_cmd0 (core, "dcs vfork fork");
r_core_cmd0 (core, "dcs vfork fork");
break;
case 'c':
case 'c': // "dcc"
r_reg_arena_swap (core->dbg->reg, true);
if (input[2] == 'u') {
r_debug_continue_until_optype (core->dbg, R_ANAL_OP_TYPE_UCALL, 0);
@ -2922,9 +2922,9 @@ static int cmd_debug(void *data, const char *input) {
break;
case 's':
if (input[2]) {
char *str;
r_cons_push ();
char * str = r_core_cmd_str (core,
sdb_fmt (0, "gs %s", input + 2));
str = r_core_cmd_str (core, sdb_fmt (0, "gs %s", input + 2));
r_cons_pop ();
r_core_cmdf (core, "dx %s", str); //`gs %s`", input+2);
free (str);

View File

@ -39,4 +39,9 @@ return strdup (
"gpr r14 .32 56 0\n"
"gpr r15 .32 60 0\n"
"gpr cpsr .32 64 0\n"
"gpr nf .1 .512 0 sign\n" // msb bit of last op
"gpr zf .1 .513 0 zero\n" // set if last op is 0
"gpr cf .1 .514 0 carry\n" // set if last op carries
"gpr vf .1 .515 0 overflow\n" // set if overflows
"gpr thumb .1 .517 0 thumb\n"
);

View File

@ -25,7 +25,7 @@ Build() {
}
RebuildIOSDebug() {
Build libr/debug
Rebuild libr/debug
Rebuild binr/radare2
make -C binr/radare2 ios-sign
if [ -n "${IOSIP}" ]; then
@ -66,6 +66,6 @@ java) RebuildJava ; ;;
iosdbg) RebuildIOSDebug ; ;;
capstone|cs) RebuildCapstone ; ;;
*)
echo "Usage: sys/rebuild.sh [java|capstone|sdb]"
echo "Usage: sys/rebuild.sh [java|capstone|sdb|iosdbg|cs|sdb|bin]"
;;
esac