mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-08 23:07:17 +00:00
Fix regprofile issue when loading x86 bins from non-x86
This commit is contained in:
parent
d40b0d122c
commit
24a27ecfcb
@ -1088,6 +1088,186 @@ static int esil_x86_cs_fini (RAnalEsil *esil)
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
static int set_reg_profile(RAnal *anal) {
|
||||
const char *p = NULL;
|
||||
switch (anal->bits) {
|
||||
case 16: p=
|
||||
"=pc ip\n"
|
||||
"=sp sp\n"
|
||||
"=bp bp\n"
|
||||
"=a0 ax\n"
|
||||
"=a1 bx\n"
|
||||
"=a2 cx\n"
|
||||
"=a3 di\n"
|
||||
"gpr ip .16 48 0\n"
|
||||
"gpr ax .16 24 0\n"
|
||||
"gpr ah .8 24 0\n"
|
||||
"gpr al .8 25 0\n"
|
||||
"gpr bx .16 0 0\n"
|
||||
"gpr bh .8 0 0\n"
|
||||
"gpr bl .8 1 0\n"
|
||||
"gpr cx .16 4 0\n"
|
||||
"gpr ch .8 4 0\n"
|
||||
"gpr cl .8 5 0\n"
|
||||
"gpr dx .16 8 0\n"
|
||||
"gpr dh .8 8 0\n"
|
||||
"gpr dl .8 9 0\n"
|
||||
"gpr sp .16 60 0\n"
|
||||
"gpr bp .16 20 0\n"
|
||||
"gpr si .16 12 0\n"
|
||||
"gpr di .16 16 0\n"
|
||||
"seg cs .16 52 0\n"
|
||||
"gpr flags .16 56 0\n"
|
||||
"gpr cf .1 .448 0\n"
|
||||
"flg flag_p .1 .449 0\n"
|
||||
"flg flag_a .1 .450 0\n"
|
||||
"gpr zf .1 .451 0\n"
|
||||
"gpr sf .1 .452 0\n"
|
||||
"flg flag_t .1 .453 0\n"
|
||||
"flg flag_i .1 .454 0\n"
|
||||
"flg flag_d .1 .455 0\n"
|
||||
"flg of .1 .456 0\n"
|
||||
"flg flag_r .1 .457 0\n";
|
||||
#if 0
|
||||
"drx dr0 .32 0 0\n"
|
||||
"drx dr1 .32 4 0\n"
|
||||
"drx dr2 .32 8 0\n"
|
||||
"drx dr3 .32 12 0\n"
|
||||
//"drx dr4 .32 16 0\n"
|
||||
//"drx dr5 .32 20 0\n"
|
||||
"drx dr6 .32 24 0\n"
|
||||
"drx dr7 .32 28 0\n"
|
||||
#endif
|
||||
break;
|
||||
case 32: p=
|
||||
"=pc eip\n"
|
||||
"=sp esp\n"
|
||||
"=bp ebp\n"
|
||||
"=a0 eax\n"
|
||||
"=a1 ebx\n"
|
||||
"=a2 ecx\n"
|
||||
"=a3 edi\n"
|
||||
"gpr eip .32 48 0\n"
|
||||
"gpr ip .16 48 0\n"
|
||||
"gpr oeax .32 44 0\n"
|
||||
"gpr eax .32 24 0\n"
|
||||
"gpr ax .16 24 0\n"
|
||||
"gpr ah .8 24 0\n"
|
||||
"gpr al .8 25 0\n"
|
||||
"gpr ebx .32 0 0\n"
|
||||
"gpr bx .16 0 0\n"
|
||||
"gpr bh .8 0 0\n"
|
||||
"gpr bl .8 1 0\n"
|
||||
"gpr ecx .32 4 0\n"
|
||||
"gpr cx .16 4 0\n"
|
||||
"gpr ch .8 4 0\n"
|
||||
"gpr cl .8 5 0\n"
|
||||
"gpr edx .32 8 0\n"
|
||||
"gpr dx .16 8 0\n"
|
||||
"gpr dh .8 8 0\n"
|
||||
"gpr dl .8 9 0\n"
|
||||
"gpr esp .32 60 0\n"
|
||||
"gpr sp .16 60 0\n"
|
||||
"gpr ebp .32 20 0\n"
|
||||
"gpr bp .16 20 0\n"
|
||||
"gpr esi .32 12 0\n"
|
||||
"gpr si .16 12 0\n"
|
||||
"gpr edi .32 16 0\n"
|
||||
"gpr di .16 16 0\n"
|
||||
"seg xfs .32 36 0\n"
|
||||
"seg xgs .32 40 0\n"
|
||||
"seg xcs .32 52 0\n"
|
||||
"seg cs .16 52 0\n"
|
||||
"seg xss .32 52 0\n"
|
||||
"gpr eflags .32 56 0 c1p.a.zstido.n.rv\n"
|
||||
"gpr flags .16 56 0\n"
|
||||
"gpr cf .1 .448 0\n"
|
||||
"flg flag_p .1 .449 0\n"
|
||||
"flg flag_a .1 .450 0\n"
|
||||
"gpr zf .1 .451 0\n"
|
||||
"gpr sf .1 .452 0\n"
|
||||
"flg flag_t .1 .453 0\n"
|
||||
"flg flag_i .1 .454 0\n"
|
||||
"flg flag_d .1 .455 0\n"
|
||||
"flg of .1 .456 0\n"
|
||||
"flg flag_r .1 .457 0\n"
|
||||
"drx dr0 .32 0 0\n"
|
||||
"drx dr1 .32 4 0\n"
|
||||
"drx dr2 .32 8 0\n"
|
||||
"drx dr3 .32 12 0\n"
|
||||
//"drx dr4 .32 16 0\n"
|
||||
//"drx dr5 .32 20 0\n"
|
||||
"drx dr6 .32 24 0\n"
|
||||
"drx dr7 .32 28 0\n";
|
||||
break;
|
||||
default: p=
|
||||
"=pc rip\n"
|
||||
"=sp rsp\n"
|
||||
"=bp rbp\n"
|
||||
"=a0 rax\n"
|
||||
"=a1 rbx\n"
|
||||
"=a2 rcx\n"
|
||||
"=a3 rdx\n"
|
||||
"# no profile defined for x86-64\n"
|
||||
"gpr r15 .64 0 0\n"
|
||||
"gpr r14 .64 8 0\n"
|
||||
"gpr r13 .64 16 0\n"
|
||||
"gpr r12 .64 24 0\n"
|
||||
"gpr rbp .64 32 0\n"
|
||||
"gpr ebp .32 32 0\n"
|
||||
"gpr rbx .64 40 0\n"
|
||||
"gpr ebx .32 40 0\n"
|
||||
"gpr bx .16 40 0\n"
|
||||
"gpr bh .8 40 0\n"
|
||||
"gpr bl .8 41 0\n"
|
||||
"gpr r11 .64 48 0\n"
|
||||
"gpr r10 .64 56 0\n"
|
||||
"gpr r9 .64 64 0\n"
|
||||
"gpr r8 .64 72 0\n"
|
||||
"gpr rax .64 80 0\n"
|
||||
"gpr eax .32 80 0\n"
|
||||
"gpr rcx .64 88 0\n"
|
||||
"gpr ecx .32 88 0\n"
|
||||
"gpr rdx .64 96 0\n"
|
||||
"gpr edx .32 96 0\n"
|
||||
"gpr rsi .64 104 0\n"
|
||||
"gpr esi .32 104 0\n"
|
||||
"gpr rdi .64 112 0\n"
|
||||
"gpr edi .32 112 0\n"
|
||||
"gpr oeax .64 120 0\n"
|
||||
"gpr rip .64 128 0\n"
|
||||
"seg cs .64 136 0\n"
|
||||
//"flg eflags .64 144 0\n"
|
||||
"gpr eflags .32 144 0 c1p.a.zstido.n.rv\n"
|
||||
"gpr cf .1 .1152 0\n"
|
||||
"flg flag_p .1 .1153 0\n"
|
||||
"flg flag_a .1 .1154 0\n"
|
||||
"gpr zf .1 .1155 0\n"
|
||||
"gpr sf .1 .1156 0\n"
|
||||
"flg flag_t .1 .1157 0\n"
|
||||
"flg flag_i .1 .1158 0\n"
|
||||
"flg flag_d .1 .1159 0\n"
|
||||
"flg of .1 .1160 0\n"
|
||||
"flg flag_r .1 .1161 0\n"
|
||||
"gpr rsp .64 152 0\n"
|
||||
"seg ss .64 160 0\n"
|
||||
"seg fs_base .64 168 0\n"
|
||||
"seg gs_base .64 176 0\n"
|
||||
"seg ds .64 184 0\n"
|
||||
"seg es .64 192 0\n"
|
||||
"seg fs .64 200 0\n"
|
||||
"seg gs .64 208 0\n"
|
||||
"drx dr0 .32 0 0\n"
|
||||
"drx dr1 .32 4 0\n"
|
||||
"drx dr2 .32 8 0\n"
|
||||
"drx dr3 .32 12 0\n"
|
||||
"drx dr6 .32 24 0\n"
|
||||
"drx dr7 .32 28 0\n";
|
||||
break;
|
||||
}
|
||||
return r_reg_set_profile_string (anal->reg, p);
|
||||
}
|
||||
|
||||
RAnalPlugin r_anal_plugin_x86_cs = {
|
||||
.name = "x86",
|
||||
.desc = "Capstone X86 analysis",
|
||||
@ -1096,7 +1276,7 @@ RAnalPlugin r_anal_plugin_x86_cs = {
|
||||
.arch = R_SYS_ARCH_X86,
|
||||
.bits = 16|32|64,
|
||||
.op = &analop,
|
||||
//.set_reg_profile = &set_reg_profile,
|
||||
.set_reg_profile = &set_reg_profile,
|
||||
.esil_init = esil_x86_cs_init,
|
||||
.esil_fini = esil_x86_cs_fini,
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user