Fix random code style issues

This commit is contained in:
Marc 2017-07-12 17:07:47 +02:00
parent 066e85554e
commit 80d4b44b2e
14 changed files with 652 additions and 523 deletions

View File

@ -223,7 +223,7 @@ int main(int argc, char **argv) {
mode = R_SEARCH_KEYWORD;
hexstr = 0;
widestr = 1;
r_list_append(keywords, optarg);
r_list_append (keywords, optarg);
break;
case 'b':
bsize = r_num_math (NULL, optarg);

View File

@ -889,7 +889,7 @@ static int addSearchKwCB(RSignItem *it, void *user) {
}
it2 = r_sign_item_dup (it);
r_list_append(ss->items, it2);
r_list_append (ss->items, it2);
// TODO(nibble): change arg data in r_search_keyword_new to void*
kw = r_search_keyword_new (bytes->bytes, bytes->size, bytes->mask, bytes->size, (const char *) it2);

View File

@ -72,9 +72,11 @@ static ut32 arm_disasm_branch(struct winedbg_arm_insn *arminsn, ut32 inst) {
short link = (inst >> 24) & 0x01;
int offset = (inst << 2) & 0x03ffffff;
if (offset & 0x02000000) offset |= 0xfc000000;
if (offset & 0x02000000){
offset |= 0xfc000000;
}
offset += 8;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "b%s%s 0x%"PFMT64x, link ? "l" : "", get_cond(inst), arminsn->pc+offset);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "b%s%s 0x%"PFMT64x, link ? "l" : "", get_cond (inst), arminsn->pc+offset);
arminsn->jmp = arminsn->pc+offset;
arminsn->fail = arminsn->pc+4;
@ -85,14 +87,16 @@ static ut32 arm_disasm_mul(struct winedbg_arm_insn *arminsn, ut32 inst) {
short accu = (inst >> 21) & 0x01;
short condcodes = (inst >> 20) & 0x01;
if (accu)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "mla%s%s %s, %s, %s, %s", get_cond(inst), condcodes ? "s" : "",
tbl_regs[get_nibble(inst, 4)], tbl_regs[get_nibble(inst, 0)],
tbl_regs[get_nibble(inst, 2)], tbl_regs[get_nibble(inst, 3)]);
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "mul%s%s %s, %s, %s", get_cond(inst), condcodes ? "s" : "",
tbl_regs[get_nibble(inst, 4)], tbl_regs[get_nibble(inst, 0)],
tbl_regs[get_nibble(inst, 2)]);
if (accu) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "mla%s%s %s, %s, %s, %s", get_cond (inst), condcodes ? "s" : "",
tbl_regs[get_nibble (inst, 4)], tbl_regs[get_nibble (inst, 0)],
tbl_regs[get_nibble (inst, 2)], tbl_regs[get_nibble (inst, 3)]);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "mul%s%s %s, %s, %s", get_cond (inst), condcodes ? "s" : "",
tbl_regs[get_nibble (inst, 4)], tbl_regs[get_nibble (inst, 0)],
tbl_regs[get_nibble (inst, 2)]);
}
return 0;
}
@ -101,36 +105,36 @@ static ut32 arm_disasm_longmul(struct winedbg_arm_insn *arminsn, ut32 inst) {
short accu = (inst >> 21) & 0x01;
short condcodes = (inst >> 20) & 0x01;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s%s%s %s, %s, %s, %s", sign ? "s" : "u", accu ? "mlal" : "mull",
get_cond(inst), condcodes ? "s" : "",
tbl_regs[get_nibble(inst, 3)], tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)], tbl_regs[get_nibble(inst, 2)]);
return 0;
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s%s%s %s, %s, %s, %s", sign ? "s" : "u", accu ? "mlal" : "mull",
get_cond (inst), condcodes ? "s" : "",
tbl_regs[get_nibble (inst, 3)], tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)], tbl_regs[get_nibble (inst, 2)]);
return 0;
}
static ut32 arm_disasm_swp(struct winedbg_arm_insn *arminsn, ut32 inst) {
short byte = (inst >> 22) & 0x01;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "swp%s%s %s, %s, [%s]", get_cond(inst), byte ? "b" : "",
tbl_regs[get_nibble(inst, 3)], tbl_regs[get_nibble(inst, 0)],
tbl_regs[get_nibble(inst, 4)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "swp%s%s %s, %s, [%s]", get_cond (inst), byte ? "b" : "",
tbl_regs[get_nibble (inst, 3)], tbl_regs[get_nibble (inst, 0)],
tbl_regs[get_nibble (inst, 4)]);
return 0;
}
static ut32 arm_disasm_branchreg(struct winedbg_arm_insn *arminsn, ut32 inst) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "b%s %s", get_cond(inst), tbl_regs[get_nibble(inst, 0)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "b%s %s", get_cond (inst), tbl_regs[get_nibble (inst, 0)]);
return 0;
}
static ut32 arm_disasm_branchxchg(struct winedbg_arm_insn *arminsn, ut32 inst) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "bx%s %s", get_cond(inst), tbl_regs[get_nibble(inst, 0)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "bx%s %s", get_cond (inst), tbl_regs[get_nibble (inst, 0)]);
return 0;
}
static ut32 arm_disasm_mrstrans(struct winedbg_arm_insn *arminsn, ut32 inst) {
short src = (inst >> 22) & 0x01;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "mrs%s %s, %s", get_cond(inst), tbl_regs[get_nibble(inst, 3)],
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "mrs%s %s, %s", get_cond (inst), tbl_regs[get_nibble (inst, 3)],
src ? "spsr" : "cpsr");
return 0;
}
@ -141,26 +145,26 @@ static ut32 arm_disasm_msrtrans(struct winedbg_arm_insn *arminsn, ut32 inst) {
short simple = (inst >> 16) & 0x01;
if (simple || !immediate) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "msr%s %s, %s", get_cond(inst), dst ? "spsr" : "cpsr",
tbl_regs[get_nibble(inst, 0)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "msr%s %s, %s", get_cond (inst), dst ? "spsr" : "cpsr",
tbl_regs[get_nibble (inst, 0)]);
return 0;
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "msr%s %s, #%u", get_cond(inst), dst ? "spsr" : "cpsr",
ROR32(inst & 0xff, 2 * get_nibble(inst, 2)));
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "msr%s %s, #%u", get_cond (inst), dst ? "spsr" : "cpsr",
ROR32 (inst & 0xff, 2 * get_nibble (inst, 2)));
return 0;
}
static ut32 arm_disasm_wordmov(struct winedbg_arm_insn *arminsn, ut32 inst) {
short top = (inst >> 22) & 0x01;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "mov%s%s %s, #%u", top ? "t" : "w", get_cond(inst),
tbl_regs[get_nibble(inst, 3)],
(get_nibble(inst, 4) << 12) | (inst & 0x0fff));
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "mov%s%s %s, #%u", top ? "t" : "w", get_cond (inst),
tbl_regs[get_nibble (inst, 3)],
(get_nibble (inst, 4) << 12) | (inst & 0x0fff));
return 0;
}
static ut32 arm_disasm_nop(struct winedbg_arm_insn *arminsn, ut32 inst) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "nop%s", get_cond(inst));
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "nop%s", get_cond (inst));
return 0;
}
@ -171,31 +175,42 @@ static ut32 arm_disasm_dataprocessing(struct winedbg_arm_insn *arminsn, ut32 ins
short no_op1 = (opcode & 0x0d) == 0x0d;
short no_dst = (opcode & 0x0c) == 0x08;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s%s", tbl_dataops[opcode], condcodes ? "s" : "", get_cond(inst));
if (!no_dst) arminsn->str_asm = r_str_appendf(arminsn->str_asm, " %s, ", tbl_regs[get_nibble(inst, 3)]);
else arminsn->str_asm = r_str_appendf(arminsn->str_asm, " ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s%s", tbl_dataops[opcode], condcodes ? "s" : "", get_cond (inst));
if (!no_dst) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, " %s, ", tbl_regs[get_nibble (inst, 3)]);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, " ");
}
if (no_op1) {
if (immediate)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "#%u", ROR32(inst & 0xff, 2 * get_nibble(inst, 2)));
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s", tbl_regs[get_nibble(inst, 0)]);
if (immediate) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "#%u", ROR32 (inst & 0xff, 2 * get_nibble (inst, 2)));
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s", tbl_regs[get_nibble (inst, 0)]);
}
} else {
if (immediate)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, #%u", tbl_regs[get_nibble(inst, 4)],
ROR32(inst & 0xff, 2 * get_nibble(inst, 2)));
else if (((inst >> 4) & 0xff) == 0x00) /* no shift */
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, %s", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)]);
else if (((inst >> 4) & 0x09) == 0x01) /* register shift */
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, %s, %s %s", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)],
if (immediate) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, #%u", tbl_regs[get_nibble (inst, 4)],
ROR32 (inst & 0xff, 2 * get_nibble (inst, 2)));
}
else if (((inst >> 4) & 0xff) == 0x00) { /* no shift */
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, %s", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)]);
}
else if (((inst >> 4) & 0x09) == 0x01) { /* register shift */
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, %s, %s %s", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)],
tbl_shifts[(inst >> 5) & 0x03], tbl_regs[(inst >> 8) & 0x0f]);
else if (((inst >> 4) & 0x01) == 0x00) /* immediate shift */
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, %s, %s #%d", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)], tbl_shifts[(inst >> 5) & 0x03],
}
else if (((inst >> 4) & 0x01) == 0x00) { /* immediate shift */
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, %s, %s #%d", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)], tbl_shifts[(inst >> 5) & 0x03],
(inst >> 7) & 0x1f);
else
}
else {
return inst;
}
}
return 0;
}
@ -209,35 +224,45 @@ static ut32 arm_disasm_singletrans(struct winedbg_arm_insn *arminsn, ut32 inst)
short immediate = !((inst >> 25) & 0x01);
short offset = inst & 0x0fff;
if (!direction) offset *= -1;
if (!direction) {
offset *= -1;
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s%s%s", load ? "ldr" : "str", byte ? "b" : "", writeback ? "t" : "",
get_cond(inst));
arminsn->str_asm = r_str_appendf(arminsn->str_asm, " %s, ", tbl_regs[get_nibble(inst, 3)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s%s%s", load ? "ldr" : "str", byte ? "b" : "", writeback ? "t" : "",
get_cond (inst));
arminsn->str_asm = r_str_appendf (arminsn->str_asm, " %s, ", tbl_regs[get_nibble (inst, 3)]);
if (indexing) {
if (immediate)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s, #%d]", tbl_regs[get_nibble(inst, 4)], offset);
else if (((inst >> 4) & 0xff) == 0x00) /* no shift */
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s, %s]", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)]);
else if (((inst >> 4) & 0x01) == 0x00) /* immediate shift (there's no register shift) */
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s, %s, %s #%d]", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)], tbl_shifts[(inst >> 5) & 0x03],
if (immediate) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s, #%d]", tbl_regs[get_nibble (inst, 4)], offset);
}
else if (((inst >> 4) & 0xff) == 0x00) { /* no shift */
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s, %s]", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)]);
}
else if (((inst >> 4) & 0x01) == 0x00) {/* immediate shift (there's no register shift) */
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s, %s, %s #%d]", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)], tbl_shifts[(inst >> 5) & 0x03],
(inst >> 7) & 0x1f);
else
}
else {
return inst;
}
} else {
if (immediate)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s], #%d", tbl_regs[get_nibble(inst, 4)], offset);
else if (((inst >> 4) & 0xff) == 0x00) /* no shift */
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s], %s", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)]);
else if (((inst >> 4) & 0x01) == 0x00) /* immediate shift (there's no register shift) */
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s], %s, %s #%d", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)], tbl_shifts[(inst >> 5) & 0x03],
if (immediate) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s], #%d", tbl_regs[get_nibble (inst, 4)], offset);
}
else if (((inst >> 4) & 0xff) == 0x00) { /* no shift */
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s], %s", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)]);
}
else if (((inst >> 4) & 0x01) == 0x00) { /* immediate shift (there's no register shift) */
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s], %s, %s #%d", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)], tbl_shifts[(inst >> 5) & 0x03],
(inst >> 7) & 0x1f);
else
}
else {
return inst;
}
}
return 0;
}
@ -252,23 +277,29 @@ static ut32 arm_disasm_halfwordtrans(struct winedbg_arm_insn *arminsn, ut32 inst
short indexing = (inst >> 24) & 0x01;
short offset = ((inst >> 4) & 0xf0) + (inst & 0x0f);
if (!direction) offset *= -1;
if (!direction){
offset *= -1;
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s%s%s%s", load ? "ldr" : "str", sign ? "s" : "",
halfword ? "h" : (sign ? "b" : ""), writeback ? "t" : "", get_cond(inst));
arminsn->str_asm = r_str_appendf(arminsn->str_asm, " %s, ", tbl_regs[get_nibble(inst, 3)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s%s%s%s", load ? "ldr" : "str", sign ? "s" : "",
halfword ? "h" : (sign ? "b" : ""), writeback ? "t" : "", get_cond (inst));
arminsn->str_asm = r_str_appendf (arminsn->str_asm, " %s, ", tbl_regs[get_nibble (inst, 3)]);
if (indexing) {
if (immediate)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s, #%d]", tbl_regs[get_nibble(inst, 4)], offset);
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s, %s]", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)]);
if (immediate) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s, #%d]", tbl_regs[get_nibble (inst, 4)], offset);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s, %s]", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)]);
}
} else {
if (immediate)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s], #%d", tbl_regs[get_nibble(inst, 4)], offset);
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "[%s], %s", tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)]);
if (immediate) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s], #%d", tbl_regs[get_nibble (inst, 4)], offset);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "[%s], %s", tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)]);
}
}
return 0;
}
@ -281,26 +312,28 @@ static ut32 arm_disasm_blocktrans(struct winedbg_arm_insn *arminsn, ut32 inst) {
short i;
short last=15;
for (i=15;i>=0;i--)
for (i=15;i>=0;i--) {
if ((inst>>i) & 1) {
last = i;
break;
}
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s%s %s%s, {", load ? "ldm" : "stm", tbl_addrmode[addrmode],
get_cond(inst), tbl_regs[get_nibble(inst, 4)], writeback ? "!" : "");
for (i=0;i<=15;i++)
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s%s %s%s, {", load ? "ldm" : "stm", tbl_addrmode[addrmode],
get_cond (inst), tbl_regs[get_nibble (inst, 4)], writeback ? "!" : "");
for (i=0;i<=15;i++) {
if ((inst>>i) & 1) {
if (i == last) arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s", tbl_regs[i]);
else arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, ", tbl_regs[i]);
if (i == last) arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s", tbl_regs[i]);
else arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, ", tbl_regs[i]);
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "}%s", psr ? "^" : "");
}
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "}%s", psr ? "^" : "");
return 0;
}
static ut32 arm_disasm_swi(struct winedbg_arm_insn *arminsn, ut32 inst) {
ut32 comment = inst & 0x00ffffff;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "swi%s #%d", get_cond(inst), comment);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "swi%s #%d", get_cond (inst), comment);
return 0;
}
@ -312,8 +345,8 @@ static ut32 arm_disasm_coproctrans(struct winedbg_arm_insn *arminsn, ut32 inst)
ut16 load = (inst >> 20) & 0x01;
ut16 CP_Opc = (inst >> 21) & 0x07;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s %u, %u, %s, cr%u, cr%u, {%u}", load ? "mrc" : "mcr",
get_cond(inst), CPnum, CP, tbl_regs[get_nibble(inst, 3)], CRn, CRm, CP_Opc);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s %u, %u, %s, cr%u, cr%u, {%u}", load ? "mrc" : "mcr",
get_cond (inst), CPnum, CP, tbl_regs[get_nibble (inst, 3)], CRn, CRm, CP_Opc);
return 0;
}
@ -325,7 +358,7 @@ static ut32 arm_disasm_coprocdataop(struct winedbg_arm_insn *arminsn, ut32 inst)
ut16 CRn = (inst >> 16) & 0x0f;
ut16 CP_Opc = (inst >> 20) & 0x0f;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "cdp%s %u, %u, cr%u, cr%u, cr%u, {%u}", get_cond(inst),
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "cdp%s %u, %u, cr%u, cr%u, cr%u, {%u}", get_cond (inst),
CPnum, CP, CRd, CRn, CRm, CP_Opc);
return 0;
}
@ -340,14 +373,16 @@ static ut32 arm_disasm_coprocdatatrans(struct winedbg_arm_insn *arminsn, ut32 in
ut16 indexing = (inst >> 24) & 0x01;
short offset = (inst & 0xff) << 2;
if (!direction) offset *= -1;
if (!direction) {
offset *= -1;
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s%s", load ? "ldc" : "stc", translen ? "l" : "", get_cond(inst));
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s%s", load ? "ldc" : "stc", translen ? "l" : "", get_cond (inst));
if (indexing)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, " %u, cr%u, [%s, #%d]%s", CPnum, CRd, tbl_regs[get_nibble(inst, 4)],
arminsn->str_asm = r_str_appendf (arminsn->str_asm, " %u, cr%u, [%s, #%d]%s", CPnum, CRd, tbl_regs[get_nibble (inst, 4)],
offset, writeback?"!":"");
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm, " %u, cr%u, [%s], #%d", CPnum, CRd, tbl_regs[get_nibble(inst, 4)],
arminsn->str_asm = r_str_appendf (arminsn->str_asm, " %u, cr%u, [%s], #%d", CPnum, CRd, tbl_regs[get_nibble (inst, 4)],
offset);
return 0;
}
@ -359,19 +394,24 @@ static ut16 thumb_disasm_hireg(struct winedbg_arm_insn *arminsn, ut16 inst) {
short h1 = (inst >> 7) & 0x01;
short op = (inst >> 8) & 0x03;
if (h1) dst += 8;
if (h2) src += 8;
if (h1) {
dst += 8;
}
if (h2) {
src += 8;
}
if (op == 2 && dst == src) { /* mov rx, rx */
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "nop");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "nop");
return 0;
}
if (op == 3)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "b%sx %s", h1?"l":"", tbl_regs[src]);
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s, %s", tbl_hiops_t[op], tbl_regs[dst], tbl_regs[src]);
if (op == 3) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "b%sx %s", h1?"l":"", tbl_regs[src]);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s, %s", tbl_hiops_t[op], tbl_regs[dst], tbl_regs[src]);
}
return 0;
}
@ -380,7 +420,7 @@ static ut16 thumb_disasm_aluop(struct winedbg_arm_insn *arminsn, ut16 inst) {
short src = (inst >> 3) & 0x07;
short op = (inst >> 6) & 0x0f;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s, %s", tbl_aluops_t[op], tbl_regs[dst], tbl_regs[src]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s, %s", tbl_aluops_t[op], tbl_regs[dst], tbl_regs[src]);
return 0;
}
@ -390,21 +430,30 @@ static ut16 thumb_disasm_pushpop(struct winedbg_arm_insn *arminsn, ut16 inst) {
short i;
short last;
for (i=7;i>=0;i--)
if ((inst>>i) & 1) break;
for (i=7;i>=0;i--) {
if ((inst>>i) & 1) {
break;
}
}
last = i;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s {", load ? "pop" : "push");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s {", load ? "pop" : "push");
for (i=0;i<=7;i++)
for (i=0;i<=7;i++) {
if ((inst>>i) & 1) {
if (i == last) arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s", tbl_regs[i]);
else arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, ", tbl_regs[i]);
if (i == last) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s", tbl_regs[i]);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, ", tbl_regs[i]);
}
}
if (lrpc)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s", last ? ", " : "", load ? "pc" : "lr");
}
if (lrpc) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s", last ? ", " : "", load ? "pc" : "lr");
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "}");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "}");
return 0;
}
@ -413,25 +462,33 @@ static ut16 thumb_disasm_blocktrans(struct winedbg_arm_insn *arminsn, ut16 inst)
short i;
short last;
for (i=7;i>=0;i--)
if ((inst>>i) & 1) break;
for (i=7;i>=0;i--) {
if ((inst>>i) & 1) {
break;
}
}
last = i;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s!, {", load ? "ldmia" : "stmia", tbl_regs[(inst >> 8) & 0x07]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s!, {", load ? "ldmia" : "stmia", tbl_regs[(inst >> 8) & 0x07]);
for (i=0;i<=7;i++)
for (i=0;i<=7;i++) {
if ((inst>>i) & 1) {
if (i == last) arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s", tbl_regs[i]);
else arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, ", tbl_regs[i]);
if (i == last) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s", tbl_regs[i]);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, ", tbl_regs[i]);
}
}
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "}");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "}");
return 0;
}
static ut16 thumb_disasm_condbranch(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 offset = inst & 0x00ff;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "b%s 0x%"PFMT64x, tbl_cond[(inst >> 8) & 0x0f], arminsn->pc+offset);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "b%s 0x%"PFMT64x, tbl_cond[(inst >> 8) & 0x0f], arminsn->pc+offset);
arminsn->jmp = arminsn->pc+offset;
arminsn->fail = arminsn->pc+4;
@ -441,9 +498,11 @@ static ut16 thumb_disasm_condbranch(struct winedbg_arm_insn *arminsn, ut16 inst)
static ut16 thumb_disasm_uncondbranch(struct winedbg_arm_insn *arminsn, ut16 inst) {
short offset = (inst & 0x07ff) << 1;
if (offset & 0x0800) offset |= 0xf000;
if (offset & 0x0800) {
offset |= 0xf000;
}
offset += 4;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "b 0x%"PFMT64x, arminsn->pc+offset);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "b 0x%"PFMT64x, arminsn->pc+offset);
arminsn->jmp = arminsn->pc+offset;
return 0;
@ -453,47 +512,49 @@ static ut16 thumb_disasm_loadadr(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 src = (inst >> 11) & 0x01;
ut16 offset = (inst & 0xff) << 2;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "add %s, %s, #%d", tbl_regs[(inst >> 8) & 0x07], src ? "sp" : "pc",
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "add %s, %s, #%d", tbl_regs[(inst >> 8) & 0x07], src ? "sp" : "pc",
offset);
return 0;
}
static ut16 thumb_disasm_swi(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 comment = inst & 0x00ff;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "swi #%d", comment);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "swi #%d", comment);
return 0;
}
static ut16 thumb_disasm_nop(struct winedbg_arm_insn *arminsn, ut16 inst) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "nop");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "nop");
return 0;
}
static ut16 thumb_disasm_ldrpcrel(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 offset = (inst & 0xff) << 2;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "ldr %s, [pc, #%u]", tbl_regs[(inst >> 8) & 0x07], offset);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "ldr %s, [pc, #%u]", tbl_regs[(inst >> 8) & 0x07], offset);
return 0;
}
static ut16 thumb_disasm_ldrsprel(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 offset = (inst & 0xff) << 2;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s, [sp, #%u]", (inst & 0x0800)?"ldr":"str",
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s, [sp, #%u]", (inst & 0x0800)?"ldr":"str",
tbl_regs[(inst >> 8) & 0x07], offset);
return 0;
}
static ut16 thumb_disasm_addsprel(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 offset = (inst & 0x7f) << 2;
if ((inst >> 7) & 0x01)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "sub sp, sp, #%u", offset);
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "add sp, sp, #%u", offset);
if ((inst >> 7) & 0x01) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "sub sp, sp, #%u", offset);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "add sp, sp, #%u", offset);
}
return 0;
}
static ut16 thumb_disasm_ldrimm(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 offset = (inst & 0x07c0) >> 6;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s %s, [%s, #%u]",
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s %s, [%s, #%u]",
(inst & 0x0800)?"ldr":"str", (inst & 0x1000)?"b":"",
tbl_regs[inst & 0x07], tbl_regs[(inst >> 3) & 0x07],
(inst & 0x1000)?offset:(offset << 2));
@ -502,13 +563,13 @@ static ut16 thumb_disasm_ldrimm(struct winedbg_arm_insn *arminsn, ut16 inst) {
static ut16 thumb_disasm_ldrhimm(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 offset = (inst & 0x07c0) >> 5;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s, [%s, #%u]", (inst & 0x0800)?"ldrh":"strh",
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s, [%s, #%u]", (inst & 0x0800)?"ldrh":"strh",
tbl_regs[inst & 0x07], tbl_regs[(inst >> 3) & 0x07], offset);
return 0;
}
static ut16 thumb_disasm_ldrreg(struct winedbg_arm_insn *arminsn, ut16 inst) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s%s %s, [%s, %s]",
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s%s %s, [%s, %s]",
(inst & 0x0800)?"ldr":"str", (inst & 0x0400)?"b":"",
tbl_regs[inst & 0x07], tbl_regs[(inst >> 3) & 0x07],
tbl_regs[(inst >> 6) & 0x07]);
@ -516,7 +577,7 @@ static ut16 thumb_disasm_ldrreg(struct winedbg_arm_insn *arminsn, ut16 inst) {
}
static ut16 thumb_disasm_ldrsreg(struct winedbg_arm_insn *arminsn, ut16 inst) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s, [%s, %s]",
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s, [%s, %s]",
tbl_sregops_t[(inst >> 10) & 0x03], tbl_regs[inst & 0x07],
tbl_regs[(inst >> 3) & 0x07], tbl_regs[(inst >> 6) & 0x07]);
return 0;
@ -524,7 +585,7 @@ static ut16 thumb_disasm_ldrsreg(struct winedbg_arm_insn *arminsn, ut16 inst) {
static ut16 thumb_disasm_immop(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 op = (inst >> 11) & 0x03;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s, #%u", tbl_immops_t[op], tbl_regs[(inst >> 8) & 0x07],
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s, #%u", tbl_immops_t[op], tbl_regs[(inst >> 8) & 0x07],
inst & 0xff);
return 0;
}
@ -533,25 +594,27 @@ static ut16 thumb_disasm_addsub(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 op = (inst >> 9) & 0x01;
ut16 immediate = (inst >> 10) & 0x01;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s, %s, ", op ? "sub" : "add",
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s, %s, ", op ? "sub" : "add",
tbl_regs[inst & 0x07], tbl_regs[(inst >> 3) & 0x07]);
if (immediate)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "#%d", (inst >> 6) & 0x07);
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s", tbl_regs[(inst >> 6) & 0x07]);
if (immediate) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "#%d", (inst >> 6) & 0x07);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s", tbl_regs[(inst >> 6) & 0x07]);
}
return 0;
}
static ut16 thumb_disasm_movshift(struct winedbg_arm_insn *arminsn, ut16 inst) {
ut16 op = (inst >> 11) & 0x03;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s %s, %s, #%u", tbl_shifts[op],
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s %s, %s, #%u", tbl_shifts[op],
tbl_regs[inst & 0x07], tbl_regs[(inst >> 3) & 0x07], (inst >> 6) & 0x1f);
return 0;
}
static ut32 thumb2_disasm_branchlinked(struct winedbg_arm_insn *arminsn, ut32 inst) {
ut32 offset = (((inst & 0x07ff0000) >> 4) | ((inst & 0x000007ff) << 1)) + 4;
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "bl 0x%"PFMT64x, arminsn->pc+offset);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "bl 0x%"PFMT64x, arminsn->pc+offset);
arminsn->jmp = arminsn->pc+offset;
return 0;
@ -561,31 +624,32 @@ static ut32 thumb2_disasm_misc(struct winedbg_arm_insn *arminsn, ut32 inst) {
ut16 op1 = (inst >> 20) & 0x03;
ut16 op2 = (inst >> 4) & 0x03;
if (get_nibble(inst, 4) != get_nibble(inst, 0))
if (get_nibble (inst, 4) != get_nibble (inst, 0)) {
return inst;
}
if (op1 == 3 && op2 == 0) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "clz %s, %s ", tbl_regs[get_nibble(inst, 2)],
tbl_regs[get_nibble(inst, 0)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "clz %s, %s ", tbl_regs[get_nibble (inst, 2)],
tbl_regs[get_nibble (inst, 0)]);
return 0;
}
if (op1 == 1) {
switch (op2) {
case 0:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "rev ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "rev ");
break;
case 1:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "rev16 ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "rev16 ");
break;
case 2:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "rbit ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "rbit ");
break;
case 3:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "revsh ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "revsh ");
break;
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, %s ", tbl_regs[get_nibble(inst, 2)], tbl_regs[get_nibble(inst, 0)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, %s ", tbl_regs[get_nibble (inst, 2)], tbl_regs[get_nibble (inst, 0)]);
return 0;
}
@ -596,29 +660,30 @@ static ut32 thumb2_disasm_mul(struct winedbg_arm_insn *arminsn, ut32 inst) {
ut16 op1 = (inst >> 20) & 0x07;
ut16 op2 = (inst >> 4) & 0x03;
if (op1)
if (op1) {
return inst;
}
if (op2 == 0 && get_nibble(inst, 3) != 0xf) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "mla %s, %s, %s, %s ", tbl_regs[get_nibble(inst, 2)],
tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)],
tbl_regs[get_nibble(inst, 3)]);
if (op2 == 0 && get_nibble (inst, 3) != 0xf) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "mla %s, %s, %s, %s ", tbl_regs[get_nibble (inst, 2)],
tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)],
tbl_regs[get_nibble (inst, 3)]);
return 0;
}
if (op2 == 0 && get_nibble(inst, 3) == 0xf) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "mul %s, %s, %s ", tbl_regs[get_nibble(inst, 2)],
tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)]);
if (op2 == 0 && get_nibble (inst, 3) == 0xf) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "mul %s, %s, %s ", tbl_regs[get_nibble (inst, 2)],
tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)]);
return 0;
}
if (op2 == 1) {
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "mls %s, %s, %s, %s ", tbl_regs[get_nibble(inst, 2)],
tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)],
tbl_regs[get_nibble(inst, 3)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "mls %s, %s, %s, %s ", tbl_regs[get_nibble (inst, 2)],
tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)],
tbl_regs[get_nibble (inst, 3)]);
return 0;
}
@ -632,39 +697,39 @@ static ut32 thumb2_disasm_longmuldiv(struct winedbg_arm_insn *arminsn, ut32 inst
if (op2 == 0) {
switch (op1) {
case 0:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "smull ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "smull ");
break;
case 2:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "umull ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "umull ");
break;
case 4:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "smlal ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "smlal ");
break;
case 6:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "umlal ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "umlal ");
break;
default:
return inst;
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, %s, %s, %s ",
tbl_regs[get_nibble(inst, 3)], tbl_regs[get_nibble(inst, 2)],
tbl_regs[get_nibble(inst, 4)], tbl_regs[get_nibble(inst, 0)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, %s, %s, %s ",
tbl_regs[get_nibble (inst, 3)], tbl_regs[get_nibble (inst, 2)],
tbl_regs[get_nibble (inst, 4)], tbl_regs[get_nibble (inst, 0)]);
return 0;
}
if (op2 == 0xffff) {
switch (op1) {
case 1:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "sdiv ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "sdiv ");
break;
case 3:
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "udiv ");
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "udiv ");
break;
default:
return inst;
}
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "%s, %s, %s ", tbl_regs[get_nibble(inst, 2)], tbl_regs[get_nibble(inst, 4)],
tbl_regs[get_nibble(inst, 0)]);
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "%s, %s, %s ", tbl_regs[get_nibble (inst, 2)], tbl_regs[get_nibble (inst, 4)],
tbl_regs[get_nibble (inst, 0)]);
return 0;
}
@ -675,16 +740,18 @@ static ut32 thumb2_disasm_coprocmov1(struct winedbg_arm_insn *arminsn, ut32 inst
ut16 opc1 = (inst >> 21) & 0x07;
ut16 opc2 = (inst >> 5) & 0x07;
if (opc2)
arminsn->str_asm = r_str_appendf(arminsn->str_asm,
if (opc2) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm,
"%s%s\tp%u, #%u, %s, cr%u, cr%u, #%u", (inst & 0x00100000)?"mrc":"mcr",
(inst & 0x10000000)?"2":"", get_nibble(inst, 2), opc1,
tbl_regs[get_nibble(inst, 3)], get_nibble(inst, 4), get_nibble(inst, 0), opc2);
else
arminsn->str_asm = r_str_appendf(arminsn->str_asm,
(inst & 0x10000000)?"2":"", get_nibble (inst, 2), opc1,
tbl_regs[get_nibble (inst, 3)], get_nibble (inst, 4), get_nibble (inst, 0), opc2);
}
else {
arminsn->str_asm = r_str_appendf (arminsn->str_asm,
"%s%s\tp%u, #%u, %s, cr%u, cr%u", (inst & 0x00100000)?"mrc":"mcr",
(inst & 0x10000000)?"2":"", get_nibble(inst, 2), opc1,
tbl_regs[get_nibble(inst, 3)], get_nibble(inst, 4), get_nibble(inst, 0));
(inst & 0x10000000)?"2":"", get_nibble (inst, 2), opc1,
tbl_regs[get_nibble (inst, 3)], get_nibble (inst, 4), get_nibble (inst, 0));
}
return 0;
}
@ -814,10 +881,13 @@ int arm_disasm_one_insn(struct winedbg_arm_insn *arminsn) {
a_ptr++;
}
if (!matched)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "Unknown ARM Instruction: %08x", inst);
else a_ptr->func(arminsn, inst);
arminsn->str_hex = r_str_appendf(arminsn->str_hex, "%02x%02x%02x%02x",
if (!matched) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "Unknown ARM Instruction: %08x", inst);
}
else {
a_ptr->func(arminsn, inst);
}
arminsn->str_hex = r_str_appendf (arminsn->str_hex, "%02x%02x%02x%02x",
*((ut8*)(&inst)), *((ut8*)(&inst)+1), *((ut8*)(&inst)+2), *((ut8*)(&inst)+3));
return size;
} else {
@ -838,10 +908,13 @@ int arm_disasm_one_insn(struct winedbg_arm_insn *arminsn) {
t2_ptr++;
}
if (!matched)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "Unknown Thumb2 Instruction: %08x", inst);
else t2_ptr->func(arminsn, inst);
arminsn->str_hex = r_str_appendf(arminsn->str_hex, "%02x%02x%02x%02x",
if (!matched) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "Unknown Thumb2 Instruction: %08x", inst);
}
else {
t2_ptr->func(arminsn, inst);
}
arminsn->str_hex = r_str_appendf (arminsn->str_hex, "%02x%02x%02x%02x",
*((ut8*)(&inst)), *((ut8*)(&inst)+1), *((ut8*)(&inst)+2), *((ut8*)(&inst)+3));
return size;
default:
@ -857,10 +930,13 @@ int arm_disasm_one_insn(struct winedbg_arm_insn *arminsn) {
t_ptr++;
}
if (!matched)
arminsn->str_asm = r_str_appendf(arminsn->str_asm, "Unknown Thumb Instruction: %04x", tinst);
else t_ptr->func(arminsn, tinst);
arminsn->str_hex = r_str_appendf(arminsn->str_hex, "%02x%02x", *((ut8*)(&tinst)), *((ut8*)(&tinst)+1));
if (!matched) {
arminsn->str_asm = r_str_appendf (arminsn->str_asm, "Unknown Thumb Instruction: %04x", tinst);
}
else {
t_ptr->func(arminsn, tinst);
}
arminsn->str_hex = r_str_appendf (arminsn->str_hex, "%02x%02x", *((ut8*)(&tinst)), *((ut8*)(&tinst)+1));
return size;
}
return size;

View File

@ -234,15 +234,15 @@ static const ut8 *r_bin_dwarf_parse_lnp_header (
hdr->opcode_base = READ (buf, ut8);
if (f) {
fprintf(f, "DWARF LINE HEADER\n");
fprintf(f, " total_length: %d\n", hdr->unit_length.part1);
fprintf(f, " version: %d\n", hdr->version);
fprintf(f, " header_length: : %"PFMT64d"\n", hdr->header_length);
fprintf(f, " mininstlen: %d\n", hdr->min_inst_len);
fprintf(f, " is_stmt: %d\n", hdr->default_is_stmt);
fprintf(f, " line_base: %d\n", hdr->line_base);
fprintf(f, " line_range: %d\n", hdr->line_range);
fprintf(f, " opcode_base: %d\n", hdr->opcode_base);
fprintf (f, "DWARF LINE HEADER\n");
fprintf (f, " total_length: %d\n", hdr->unit_length.part1);
fprintf (f, " version: %d\n", hdr->version);
fprintf (f, " header_length: : %"PFMT64d"\n", hdr->header_length);
fprintf (f, " mininstlen: %d\n", hdr->min_inst_len);
fprintf (f, " is_stmt: %d\n", hdr->default_is_stmt);
fprintf (f, " line_base: %d\n", hdr->line_base);
fprintf (f, " line_range: %d\n", hdr->line_range);
fprintf (f, " opcode_base: %d\n", hdr->opcode_base);
}
if (hdr->opcode_base>0) {
@ -252,7 +252,7 @@ static const ut8 *r_bin_dwarf_parse_lnp_header (
if (buf+2>buf_end) break;
hdr->std_opcode_lengths[i] = READ (buf, ut8);
if (f) {
fprintf(f, " op %d %d\n", i, hdr->std_opcode_lengths[i]);
fprintf (f, " op %d %d\n", i, hdr->std_opcode_lengths[i]);
}
}
} else {
@ -443,7 +443,7 @@ static const ut8* r_bin_dwarf_parse_ext_opcode(const RBin *a, const ut8 *obuf,
}
if (f) {
fprintf(f, "End of Sequence\n");
fprintf (f, "End of Sequence\n");
}
break;
case DW_LNE_set_address:
@ -456,15 +456,15 @@ static const ut8* r_bin_dwarf_parse_ext_opcode(const RBin *a, const ut8 *obuf,
regs->address = addr;
if (f) {
fprintf(f, "set Address to 0x%"PFMT64x"\n", addr);
fprintf (f, "set Address to 0x%"PFMT64x"\n", addr);
}
break;
case DW_LNE_define_file:
filename = (const char*)buf;
if (f) {
fprintf(f, "define_file\n");
fprintf(f, "filename %s\n", filename);
fprintf (f, "define_file\n");
fprintf (f, "filename %s\n", filename);
}
buf += (strlen (filename) + 1);
@ -473,15 +473,15 @@ static const ut8* r_bin_dwarf_parse_ext_opcode(const RBin *a, const ut8 *obuf,
buf = r_uleb128 (buf, ST32_MAX, &dir_idx);
break;
case DW_LNE_set_discriminator:
buf = r_uleb128(buf, ST32_MAX, &addr);
buf = r_uleb128 (buf, ST32_MAX, &addr);
if (f) {
fprintf(f, "set Discriminator to %"PFMT64d"\n", addr);
fprintf (f, "set Discriminator to %"PFMT64d"\n", addr);
}
regs->discriminator = addr;
break;
default:
if (f) {
fprintf(f, "Unexpeced opcode %d\n", opcode);
fprintf (f, "Unexpeced opcode %d\n", opcode);
}
break;
}
@ -578,32 +578,32 @@ static const ut8* r_bin_dwarf_parse_std_opcode(
buf = r_leb128(buf, &sbuf);
regs->line += sbuf;
if (f) {
fprintf(f, "Advance line by %"PFMT64d", to %"PFMT64d"\n", sbuf, regs->line);
fprintf (f, "Advance line by %"PFMT64d", to %"PFMT64d"\n", sbuf, regs->line);
}
break;
case DW_LNS_set_file:
buf = r_uleb128 (buf, ST32_MAX, &addr);
if (f) {
fprintf(f, "Set file to %"PFMT64d"\n", addr);
fprintf (f, "Set file to %"PFMT64d"\n", addr);
}
regs->file = addr;
break;
case DW_LNS_set_column:
buf = r_uleb128(buf, ST32_MAX, &addr);
buf = r_uleb128 (buf, ST32_MAX, &addr);
if (f) {
fprintf(f, "Set column to %"PFMT64d"\n", addr);
fprintf (f, "Set column to %"PFMT64d"\n", addr);
}
regs->column = addr;
break;
case DW_LNS_negate_stmt:
regs->is_stmt = regs->is_stmt ? DWARF_FALSE : DWARF_TRUE;
if (f) {
fprintf(f, "Set is_stmt to %d\n", regs->is_stmt);
fprintf (f, "Set is_stmt to %d\n", regs->is_stmt);
}
break;
case DW_LNS_set_basic_block:
if (f) {
fprintf(f, "set_basic_block\n");
fprintf (f, "set_basic_block\n");
}
regs->basic_block = DWARF_TRUE;
break;
@ -616,7 +616,7 @@ static const ut8* r_bin_dwarf_parse_std_opcode(
}
regs->address += op_advance;
if (f) {
fprintf(f, "Advance PC by constant %"PFMT64d" to 0x%"PFMT64x"\n",
fprintf (f, "Advance PC by constant %"PFMT64d" to 0x%"PFMT64x"\n",
op_advance, regs->address);
}
break;
@ -624,31 +624,31 @@ static const ut8* r_bin_dwarf_parse_std_opcode(
operand = READ (buf, ut16);
regs->address += operand;
if (f) {
fprintf(f,"Fixed advance pc to %"PFMT64d"\n", regs->address);
fprintf (f,"Fixed advance pc to %"PFMT64d"\n", regs->address);
}
break;
case DW_LNS_set_prologue_end:
regs->prologue_end = ~0;
if (f) {
fprintf(f, "set_prologue_end\n");
fprintf (f, "set_prologue_end\n");
}
break;
case DW_LNS_set_epilogue_begin:
regs->epilogue_begin = ~0;
if (f) {
fprintf(f, "set_epilogue_begin\n");
fprintf (f, "set_epilogue_begin\n");
}
break;
case DW_LNS_set_isa:
buf = r_uleb128 (buf, ST32_MAX, &addr);
regs->isa = addr;
if (f) {
fprintf(f, "set_isa\n");
fprintf (f, "set_isa\n");
}
break;
default:
if (f) {
fprintf(f, "Unexpected opcode\n");
fprintf (f, "Unexpected opcode\n");
}
break;
}
@ -759,31 +759,41 @@ R_API int r_bin_dwarf_parse_aranges_raw(const ut8 *obuf, int len, FILE *f) {
return false;
READ_BUF (version, ut16);
if (f) printf("Version %d\n", version);
if (f) {
printf("Version %d\n", version);
}
READ_BUF (debug_info_offset, ut32);
if (f) fprintf(f, "Debug info offset %d\n", debug_info_offset);
if (f) {
fprintf (f, "Debug info offset %d\n", debug_info_offset);
}
READ_BUF (address_size, ut8);
if (f) fprintf(f, "address size %d\n", (int)address_size);
if (f) {
fprintf (f, "address size %d\n", (int)address_size);
}
READ_BUF (segment_size, ut8);
if (f) fprintf(f, "segment size %d\n", (int)segment_size);
if (f) {
fprintf (f, "segment size %d\n", (int)segment_size);
}
offset = segment_size + address_size * 2;
if (offset) {
ut64 n = (((ut64) (size_t)buf / offset) + 1) * offset - ((ut64)(size_t)buf);
if (idx+n>=len)
if (idx+n>=len) {
return false;
}
buf += n;
idx += n;
}
while ((buf - obuf) < len) {
ut64 adr, length;
if ((idx+8)>=len)
if ((idx+8)>=len) {
break;
}
READ_BUF (adr, ut64);
READ_BUF (length, ut64);
if (f) printf("length 0x%"PFMT64x" address 0x%"PFMT64x"\n", length, adr);
@ -793,11 +803,15 @@ R_API int r_bin_dwarf_parse_aranges_raw(const ut8 *obuf, int len, FILE *f) {
}
static int r_bin_dwarf_init_debug_info(RBinDwarfDebugInfo *inf) {
if (!inf) return -1;
inf->comp_units = calloc (sizeof(RBinDwarfCompUnit), DEBUG_INFO_CAPACITY);
if (!inf) {
return -1;
}
inf->comp_units = calloc (sizeof (RBinDwarfCompUnit), DEBUG_INFO_CAPACITY);
// XXX - should we be using error codes?
if (!inf->comp_units) return -ENOMEM;
if (!inf->comp_units) {
return -ENOMEM;
}
inf->capacity = DEBUG_INFO_CAPACITY;
inf->length = 0;
@ -852,12 +866,16 @@ static int r_bin_dwarf_init_comp_unit(RBinDwarfCompUnit *cu) {
static int r_bin_dwarf_expand_cu(RBinDwarfCompUnit *cu) {
RBinDwarfDIE *tmp;
if (!cu || cu->capacity == 0 || cu->capacity != cu->length) return -EINVAL;
if (!cu || cu->capacity == 0 || cu->capacity != cu->length) {
return -EINVAL;
}
tmp = (RBinDwarfDIE*)realloc(cu->dies,
cu->capacity * 2 * sizeof(RBinDwarfDIE));
if (!tmp) return -ENOMEM;
if (!tmp) {
return -ENOMEM;
}
cu->dies = tmp;
cu->capacity *= 2;
@ -866,11 +884,14 @@ static int r_bin_dwarf_expand_cu(RBinDwarfCompUnit *cu) {
}
static int r_bin_dwarf_init_abbrev_decl(RBinDwarfAbbrevDecl *ad) {
if (!ad) return -EINVAL;
ad->specs = calloc(sizeof(RBinDwarfAttrSpec), ABBREV_DECL_CAP);
if (!ad) {
return -EINVAL;
}
ad->specs = calloc (sizeof( RBinDwarfAttrSpec), ABBREV_DECL_CAP);
if (!ad->specs)
if (!ad->specs) {
return -ENOMEM;
}
ad->capacity = ABBREV_DECL_CAP;
ad->length = 0;
@ -881,14 +902,16 @@ static int r_bin_dwarf_init_abbrev_decl(RBinDwarfAbbrevDecl *ad) {
static int r_bin_dwarf_expand_abbrev_decl(RBinDwarfAbbrevDecl *ad) {
RBinDwarfAttrSpec *tmp;
if (!ad || ad->capacity==0 || ad->capacity != ad->length)
if (!ad || ad->capacity==0 || ad->capacity != ad->length) {
return -EINVAL;
}
tmp = (RBinDwarfAttrSpec*)realloc(ad->specs,
ad->capacity * 2 * sizeof(RBinDwarfAttrSpec));
tmp = (RBinDwarfAttrSpec*)realloc (ad->specs,
ad->capacity * 2 * sizeof (RBinDwarfAttrSpec));
if (!tmp)
if (!tmp) {
return -ENOMEM;
}
ad->specs = tmp;
ad->capacity *= 2;
@ -897,7 +920,9 @@ static int r_bin_dwarf_expand_abbrev_decl(RBinDwarfAbbrevDecl *ad) {
}
static int r_bin_dwarf_init_debug_abbrev(RBinDwarfDebugAbbrev *da) {
if (!da) return -EINVAL;
if (!da) {
return -EINVAL;
}
da->decls = calloc (sizeof (RBinDwarfAbbrevDecl), DEBUG_ABBREV_CAP);
if (!da->decls) {
return -ENOMEM;
@ -911,14 +936,16 @@ static int r_bin_dwarf_init_debug_abbrev(RBinDwarfDebugAbbrev *da) {
static int r_bin_dwarf_expand_debug_abbrev(RBinDwarfDebugAbbrev *da) {
RBinDwarfAbbrevDecl *tmp;
if (!da || da->capacity == 0 || da->capacity != da->length)
if (!da || da->capacity == 0 || da->capacity != da->length) {
return -EINVAL;
}
tmp = (RBinDwarfAbbrevDecl*)realloc (da->decls,
da->capacity * 2 * sizeof (RBinDwarfAbbrevDecl));
if (!tmp)
if (!tmp) {
return -ENOMEM;
}
da->decls = tmp;
da->capacity *= 2;
@ -930,15 +957,18 @@ static void dump_r_bin_dwarf_debug_abbrev(FILE *f, RBinDwarfDebugAbbrev *da) {
size_t i, j;
ut64 attr_name, attr_form;
if (!f || !da) return;
if (!f || !da) {
return;
}
for (i = 0; i < da->length; i++) {
int declstag = da->decls[i].tag;
fprintf(f, "Abbreviation Code %"PFMT64d" ", da->decls[i].code);
if (declstag>=0 && declstag < DW_TAG_LAST)
fprintf(f, "Tag %s ", dwarf_tag_name_encodings[declstag]);
fprintf(f, "[%s]\n", da->decls[i].has_children ?
fprintf (f, "Abbreviation Code %"PFMT64d" ", da->decls[i].code);
if (declstag>=0 && declstag < DW_TAG_LAST) {
fprintf (f, "Tag %s ", dwarf_tag_name_encodings[declstag]);
}
fprintf (f, "[%s]\n", da->decls[i].has_children ?
"has children" : "no children");
fprintf(f, "Offset 0x%"PFMT64x"\n", da->decls[i].offset);
fprintf (f, "Offset 0x%"PFMT64x"\n", da->decls[i].offset);
for (j = 0; j < da->decls[i].length; j++) {
attr_name = da->decls[i].specs[j].attr_name;
@ -946,7 +976,7 @@ static void dump_r_bin_dwarf_debug_abbrev(FILE *f, RBinDwarfDebugAbbrev *da) {
if (attr_name && attr_form &&
attr_name <= DW_AT_vtable_elem_location &&
attr_form <= DW_FORM_indirect) {
fprintf(f, " %s %s\n",
fprintf (f, " %s %s\n",
dwarf_attr_encodings[attr_name],
dwarf_attr_form_encodings[attr_form]);
}
@ -983,7 +1013,9 @@ static void r_bin_dwarf_free_attr_value(RBinDwarfAttrValue *val) {
static void r_bin_dwarf_free_die (RBinDwarfDIE *die) {
size_t i;
if (!die) return;
if (!die) {
return;
}
for (i = 0; i < die->length; i++) {
r_bin_dwarf_free_attr_value (&die->attr_values[i]);
}
@ -992,7 +1024,9 @@ static void r_bin_dwarf_free_die (RBinDwarfDIE *die) {
static void r_bin_dwarf_free_comp_unit (RBinDwarfCompUnit *cu) {
size_t i;
if (!cu) return;
if (!cu) {
return;
}
for (i = 0; i < cu->length; i++) {
r_bin_dwarf_free_die (&cu->dies[i]);
}
@ -1001,7 +1035,9 @@ static void r_bin_dwarf_free_comp_unit (RBinDwarfCompUnit *cu) {
static void r_bin_dwarf_free_debug_info (RBinDwarfDebugInfo *inf) {
size_t i;
if (!inf) return;
if (!inf) {
return;
}
for (i = 0; i < inf->length; i++) {
r_bin_dwarf_free_comp_unit (&inf->comp_units[i]);
}
@ -1010,10 +1046,12 @@ static void r_bin_dwarf_free_debug_info (RBinDwarfDebugInfo *inf) {
static void r_bin_dwarf_dump_attr_value(const RBinDwarfAttrValue *val, FILE *f) {
size_t i;
if (!val || !f) return;
if (!val || !f) {
return;
}
switch (val->form) {
case DW_FORM_addr:
fprintf(f, "0x%"PFMT64x"", val->encoding.address);
fprintf (f, "0x%"PFMT64x"", val->encoding.address);
break;
case DW_FORM_block:
case DW_FORM_block1:
@ -1070,25 +1108,27 @@ static void r_bin_dwarf_dump_debug_info(FILE *f, const RBinDwarfDebugInfo *inf)
size_t i, j, k;
RBinDwarfDIE *dies;
RBinDwarfAttrValue *values;
if (!inf || !f) return;
if (!inf || !f) {
return;
}
for (i = 0; i < inf->length; i++) {
fprintf(f, " Compilation Unit @ offset 0x%"PFMT64x":\n", inf->comp_units [i].offset);
fprintf(f, " Length: 0x%x\n", inf->comp_units [i].hdr.length);
fprintf(f, " Version: %d\n", inf->comp_units [i].hdr.version);
fprintf(f, " Abbrev Offset: 0x%x\n", inf->comp_units [i].hdr.abbrev_offset);
fprintf(f, " Pointer Size: %d\n", inf->comp_units [i].hdr.pointer_size);
fprintf (f, " Compilation Unit @ offset 0x%"PFMT64x":\n", inf->comp_units [i].offset);
fprintf (f, " Length: 0x%x\n", inf->comp_units [i].hdr.length);
fprintf (f, " Version: %d\n", inf->comp_units [i].hdr.version);
fprintf (f, " Abbrev Offset: 0x%x\n", inf->comp_units [i].hdr.abbrev_offset);
fprintf (f, " Pointer Size: %d\n", inf->comp_units [i].hdr.pointer_size);
dies = inf->comp_units[i].dies;
for (j = 0; j < inf->comp_units[i].length; j++) {
fprintf(f, " Abbrev Number: %"PFMT64u" ", dies[j].abbrev_code);
fprintf (f, " Abbrev Number: %"PFMT64u" ", dies[j].abbrev_code);
if (dies[j].tag && dies[j].tag <= DW_TAG_volatile_type &&
dwarf_tag_name_encodings[dies[j].tag]) {
fprintf(f, "(%s)\n", dwarf_tag_name_encodings[dies[j].tag]);
fprintf (f, "(%s)\n", dwarf_tag_name_encodings[dies[j].tag]);
} else {
fprintf(f, "(Unknown abbrev tag)\n");
fprintf (f, "(Unknown abbrev tag)\n");
}
if (!dies[j].abbrev_code)
@ -1101,12 +1141,12 @@ static void r_bin_dwarf_dump_debug_info(FILE *f, const RBinDwarfDebugInfo *inf)
if (values[k].name < DW_AT_vtable_elem_location &&
dwarf_attr_encodings[values[k].name]) {
fprintf(f, " %-18s : ", dwarf_attr_encodings[values[k].name]);
fprintf (f, " %-18s : ", dwarf_attr_encodings[values[k].name]);
} else {
fprintf(f, " TODO\t");
fprintf (f, " TODO\t");
}
r_bin_dwarf_dump_attr_value (&values[k], f);
fprintf(f, "\n");
fprintf (f, "\n");
}
}
}
@ -1183,7 +1223,7 @@ static const ut8 *r_bin_dwarf_parse_attr_value(const ut8 *obuf, int obuf_len,
break;
case DW_FORM_string:
value->encoding.str_struct.string = *buf? strdup ((const char*)buf) : NULL;
buf += (strlen((const char*)buf) + 1);
buf += (strlen ((const char*)buf) + 1);
break;
case DW_FORM_block:
buf = r_uleb128 (buf, buf_end - buf, &value->encoding.block.length);
@ -1314,7 +1354,9 @@ R_API int r_bin_dwarf_parse_info_raw(Sdb *s, RBinDwarfDebugAbbrev *da,
RBinDwarfDebugInfo *inf = NULL, di;
inf = &di;
if (!da || !s || !obuf) return false;
if (!da || !s || !obuf) {
return false;
}
r_bin_dwarf_init_debug_info (inf);
while (buf < buf_end) {
@ -1380,7 +1422,9 @@ static RBinDwarfDebugAbbrev *r_bin_dwarf_parse_abbrev_raw(const ut8 *obuf, size_
RBinDwarfDebugAbbrev *da = NULL;
// XXX - Set a suitable value here.
if (!obuf || len < 3) return da;
if (!obuf || len < 3) {
return da;
}
da = R_NEW0(RBinDwarfDebugAbbrev);
@ -1412,8 +1456,8 @@ static RBinDwarfDebugAbbrev *r_bin_dwarf_parse_abbrev_raw(const ut8 *obuf, size_
if (tmpdecl->length == tmpdecl->capacity)
r_bin_dwarf_expand_abbrev_decl(tmpdecl);
buf = r_uleb128(buf, (size_t)(buf_end-buf), &spec1);
buf = r_uleb128(buf, (size_t)(buf_end-buf), &spec2);
buf = r_uleb128 (buf, (size_t)(buf_end-buf), &spec1);
buf = r_uleb128 (buf, (size_t)(buf_end-buf), &spec2);
tmpdecl->specs[tmpdecl->length].attr_name = spec1;
tmpdecl->specs[tmpdecl->length].attr_form = spec2;
@ -1490,7 +1534,9 @@ R_API int r_bin_dwarf_parse_info(RBinDwarfDebugAbbrev *da, RBin *a, int mode) {
static RBinDwarfRow *r_bin_dwarf_row_new (ut64 addr, const char *file, int line, int col) {
RBinDwarfRow *row = R_NEW0 (RBinDwarfRow);
if (!row) return NULL;
if (!row) {
return NULL;
}
row->file = strdup (file);
row->address = addr;
row->line = line;

View File

@ -158,7 +158,7 @@ copy_string_err:
}
///////////////////////////////////////////////////////////////////////////////
int get_template(char *buf, SStrInfo *str_info) {
int get_template (char *buf, SStrInfo *str_info) {
int len = 0;
unsigned int i = 0;
char *str_type_code = 0;
@ -245,11 +245,11 @@ int get_namespace_and_name( char *buf, STypeCodeStr *type_code_str,
names_l = r_list_new();
#define SET_OPERATOR_CODE(str) { \
str_info = (SStrInfo *) malloc(sizeof(SStrInfo)); \
str_info = (SStrInfo *) malloc (sizeof(SStrInfo)); \
if (!str_info) break; \
str_info->len = strlen(str); \
str_info->len = strlen (str); \
str_info->str_ptr = str; \
r_list_append(names_l, str_info); \
r_list_append (names_l, str_info); \
}
// C++ operator code (one character, or two if the first is '_')
@ -295,14 +295,14 @@ int get_namespace_and_name( char *buf, STypeCodeStr *type_code_str,
case '$':
{
int i = 0;
str_info = (SStrInfo *) malloc(sizeof(SStrInfo));
str_info = (SStrInfo *) malloc (sizeof(SStrInfo));
if (!str_info) break;
i = get_template(buf + 1, str_info);
i = get_template (buf + 1, str_info);
if (!i) {
R_FREE(str_info);
R_FREE (str_info);
goto get_namespace_and_name_err;
}
r_list_append(names_l, str_info);
r_list_append (names_l, str_info);
buf += i;
read_len += i;
break;
@ -310,35 +310,35 @@ int get_namespace_and_name( char *buf, STypeCodeStr *type_code_str,
case '_':
switch (*++buf)
{
case '0': SET_OPERATOR_CODE("operator/="); break;
case '1': SET_OPERATOR_CODE("operator%="); break;
case '2': SET_OPERATOR_CODE("operator>>="); break;
case '3': SET_OPERATOR_CODE("operator<<="); break;
case '4': SET_OPERATOR_CODE("operator&="); break;
case '5': SET_OPERATOR_CODE("operator|="); break;
case '6': SET_OPERATOR_CODE("operator^="); break;
case '7': SET_OPERATOR_CODE("vftable"); break;
case '8': SET_OPERATOR_CODE("vbtable"); break;
case '9': SET_OPERATOR_CODE("vcall"); break;
case 'A': SET_OPERATOR_CODE("typeof"); break;
case 'B': SET_OPERATOR_CODE("local_static_guard"); break;
case 'C': SET_OPERATOR_CODE("string"); break;
case 'D': SET_OPERATOR_CODE("vbase_dtor"); break;
case 'E': SET_OPERATOR_CODE("vector_dtor"); break;
case 'G': SET_OPERATOR_CODE("scalar_dtor"); break;
case 'H': SET_OPERATOR_CODE("vector_ctor_iter"); break;
case 'I': SET_OPERATOR_CODE("vector_dtor_iter"); break;
case 'J': SET_OPERATOR_CODE("vector_vbase_ctor_iter"); break;
case 'L': SET_OPERATOR_CODE("eh_vector_ctor_iter"); break;
case 'M': SET_OPERATOR_CODE("eh_vector_dtor_iter"); break;
case 'N': SET_OPERATOR_CODE("eh_vector_vbase_ctor_iter"); break;
case 'O': SET_OPERATOR_CODE("copy_ctor_closure"); break;
case 'S': SET_OPERATOR_CODE("local_vftable"); break;
case 'T': SET_OPERATOR_CODE("local_vftable_ctor_closure"); break;
case 'U': SET_OPERATOR_CODE("operator new[]"); break;
case 'V': SET_OPERATOR_CODE("operator delete[]"); break;
case 'X': SET_OPERATOR_CODE("placement_new_closure"); break;
case 'Y': SET_OPERATOR_CODE("placement_delete_closure"); break;
case '0': SET_OPERATOR_CODE ("operator/="); break;
case '1': SET_OPERATOR_CODE ("operator%="); break;
case '2': SET_OPERATOR_CODE ("operator>>="); break;
case '3': SET_OPERATOR_CODE ("operator<<="); break;
case '4': SET_OPERATOR_CODE ("operator&="); break;
case '5': SET_OPERATOR_CODE ("operator|="); break;
case '6': SET_OPERATOR_CODE ("operator^="); break;
case '7': SET_OPERATOR_CODE ("vftable"); break;
case '8': SET_OPERATOR_CODE ("vbtable"); break;
case '9': SET_OPERATOR_CODE ("vcall"); break;
case 'A': SET_OPERATOR_CODE ("typeof"); break;
case 'B': SET_OPERATOR_CODE ("local_static_guard"); break;
case 'C': SET_OPERATOR_CODE ("string"); break;
case 'D': SET_OPERATOR_CODE ("vbase_dtor"); break;
case 'E': SET_OPERATOR_CODE ("vector_dtor"); break;
case 'G': SET_OPERATOR_CODE ("scalar_dtor"); break;
case 'H': SET_OPERATOR_CODE ("vector_ctor_iter"); break;
case 'I': SET_OPERATOR_CODE ("vector_dtor_iter"); break;
case 'J': SET_OPERATOR_CODE ("vector_vbase_ctor_iter"); break;
case 'L': SET_OPERATOR_CODE ("eh_vector_ctor_iter"); break;
case 'M': SET_OPERATOR_CODE ("eh_vector_dtor_iter"); break;
case 'N': SET_OPERATOR_CODE ("eh_vector_vbase_ctor_iter"); break;
case 'O': SET_OPERATOR_CODE ("copy_ctor_closure"); break;
case 'S': SET_OPERATOR_CODE ("local_vftable"); break;
case 'T': SET_OPERATOR_CODE ("local_vftable_ctor_closure"); break;
case 'U': SET_OPERATOR_CODE ("operator new[]"); break;
case 'V': SET_OPERATOR_CODE ("operator delete[]"); break;
case 'X': SET_OPERATOR_CODE ("placement_new_closure"); break;
case 'Y': SET_OPERATOR_CODE ("placement_delete_closure"); break;
default:
r_list_free (names_l);
return 0;
@ -355,7 +355,7 @@ int get_namespace_and_name( char *buf, STypeCodeStr *type_code_str,
#undef SET_OPERATOR_CODE
prev_pos = buf;
curr_pos = strchr(buf, '@');
curr_pos = strchr (buf, '@');
// hack for nested templates
// think about how better to fix this...
@ -381,13 +381,13 @@ int get_namespace_and_name( char *buf, STypeCodeStr *type_code_str,
// check is it teamplate???
if ((*tmp == '?') && (*(tmp + 1) == '$')) {
int i = 0;
str_info = (SStrInfo *) malloc(sizeof(SStrInfo));
i = get_template(tmp + 2, str_info);
str_info = (SStrInfo *) malloc (sizeof(SStrInfo));
i = get_template (tmp + 2, str_info);
if (!i) {
R_FREE(str_info);
R_FREE (str_info);
goto get_namespace_and_name_err;
}
r_list_append(names_l, str_info);
r_list_append (names_l, str_info);
prev_pos = tmp + i + 2;
curr_pos = strchr(prev_pos, '@');
@ -397,24 +397,24 @@ int get_namespace_and_name( char *buf, STypeCodeStr *type_code_str,
continue;
}
if (isdigit((int)*tmp)) {
tmp = r_list_get_n(abbr_names, *tmp - '0');
if (isdigit ((int)*tmp)) {
tmp = r_list_get_n (abbr_names, *tmp - '0');
if (!tmp) {
goto get_namespace_and_name_err;
}
len = 1;
} else {
tmp = (char *) malloc(len + 1);
memset(tmp, 0, len + 1);
memcpy(tmp, prev_pos, len);
r_list_append(abbr_names, tmp);
tmp = (char *) malloc (len + 1);
memset (tmp, 0, len + 1);
memcpy (tmp, prev_pos, len);
r_list_append (abbr_names, tmp);
}
str_info = (SStrInfo *) malloc(sizeof(SStrInfo));
str_info = (SStrInfo *) malloc (sizeof (SStrInfo));
str_info->str_ptr = tmp;
str_info->len = strlen(tmp);
str_info->len = strlen (tmp);
r_list_append(names_l, str_info);
r_list_append (names_l, str_info);
read_len += len;
if (len == 1) {
@ -426,21 +426,24 @@ int get_namespace_and_name( char *buf, STypeCodeStr *type_code_str,
} else {
prev_pos = curr_pos + 1;
curr_pos = strchr(curr_pos + 1, '@');
if (curr_pos)
if (curr_pos) {
read_len++;
}
}
}
get_namespace_and_name_err:
tmp_len = r_list_length(names_l);
if (amount_of_names)
if (amount_of_names) {
*amount_of_names = tmp_len;
}
it = r_list_iterator (names_l);
r_list_foreach_prev (names_l, it, str_info) {
copy_string(type_code_str, str_info->str_ptr, str_info->len);
if (--tmp_len)
if (--tmp_len) {
copy_string(type_code_str, "::", 0);
}
free(str_info);
}
r_list_free(names_l);
@ -513,12 +516,12 @@ DEF_STATE_ACTION(_)
break;
switch(*(state->buff_for_parsing)) {
PROCESS_CASE(J, "long long(__int64)")
PROCESS_CASE(K, "unsigned long long(unsigned __int64)")
PROCESS_CASE(T, "long double(80 bit precision)")
PROCESS_CASE(Z, "long double(64 bit precision)")
PROCESS_CASE(W, "wchar_t")
PROCESS_CASE(N, "bool")
PROCESS_CASE (J, "long long(__int64)")
PROCESS_CASE (K, "unsigned long long(unsigned __int64)")
PROCESS_CASE (T, "long double(80 bit precision)")
PROCESS_CASE (Z, "long double(64 bit precision)")
PROCESS_CASE (W, "wchar_t")
PROCESS_CASE (N, "bool")
default:
state->err = eTCStateMachineErrUncorrectTypeCode;
break;
@ -535,9 +538,9 @@ DEF_STATE_ACTION(_)
// +2 -> skipp @@ ( the end of class, union,...
// or +2 -> skip abbreviated_num + '@'
#define GET_USER_DEF_TYPE_NAME(data_struct_str) { \
copy_string(type_code_str, data_struct_str, 0); \
copy_string (type_code_str, data_struct_str, 0); \
\
check_len = get_namespace_and_name(state->buff_for_parsing, type_code_str, 0); \
check_len = get_namespace_and_name (state->buff_for_parsing, type_code_str, 0); \
if (check_len) { \
state->amount_of_read_chars += check_len + 1; \
state->buff_for_parsing += check_len + 1; \
@ -550,30 +553,30 @@ DEF_STATE_ACTION(_)
DEF_STATE_ACTION(T)
{
#define PROCESS_CASE(case_string, type_str) { \
check_len = strlen(case_string); \
check_len = strlen (case_string); \
if ((check_len < buff_len) && \
(strncmp(state->buff_for_parsing, case_string, check_len) == 0)) { \
copy_string(type_code_str, type_str, 0); \
(strncmp (state->buff_for_parsing, case_string, check_len) == 0)) { \
copy_string (type_code_str, type_str, 0); \
state->buff_for_parsing += check_len; \
state->amount_of_read_chars += check_len; \
return; \
} \
}
int buff_len = strlen(state->buff_for_parsing);
int buff_len = strlen (state->buff_for_parsing);
int check_len = 0;
state->state = eTCStateEnd;
PROCESS_CASE("__m64@@", "__m64");
PROCESS_CASE("__m128@@", "__m128");
PROCESS_CASE("__m128i@@", "__m128i");
PROCESS_CASE("__m256@@", "__m256");
PROCESS_CASE("__m256i@@", "__m256i");
PROCESS_CASE("__m512@@", "__m512");
PROCESS_CASE("__m512i@@", "__m512i");
PROCESS_CASE ("__m64@@", "__m64");
PROCESS_CASE ("__m128@@", "__m128");
PROCESS_CASE ("__m128i@@", "__m128i");
PROCESS_CASE ("__m256@@", "__m256");
PROCESS_CASE ("__m256i@@", "__m256i");
PROCESS_CASE ("__m512@@", "__m512");
PROCESS_CASE ("__m512i@@", "__m512i");
GET_USER_DEF_TYPE_NAME("union ");
GET_USER_DEF_TYPE_NAME ("union ");
#undef PROCESS_CASE
}
@ -581,26 +584,26 @@ DEF_STATE_ACTION(T)
DEF_STATE_ACTION(U)
{
#define PROCESS_CASE(case_string, type_str) { \
check_len = strlen(case_string); \
check_len = strlen (case_string); \
if ((check_len < buff_len) && \
(strncmp(state->buff_for_parsing, case_string, check_len) == 0)) { \
copy_string(type_code_str, type_str, 0); \
(strncmp (state->buff_for_parsing, case_string, check_len) == 0)) { \
copy_string (type_code_str, type_str, 0); \
state->amount_of_read_chars += check_len; \
state->buff_for_parsing += check_len; \
return; \
} \
}
int buff_len = strlen(state->buff_for_parsing);
int buff_len = strlen (state->buff_for_parsing);
int check_len = 0;
state->state = eTCStateEnd;
PROCESS_CASE("__m128d@@", "__m128d");
PROCESS_CASE("__m256d@@", "__m256d");
PROCESS_CASE("__m512d@@", "__m512d");
PROCESS_CASE ("__m128d@@", "__m128d");
PROCESS_CASE ("__m256d@@", "__m256d");
PROCESS_CASE ("__m512d@@", "__m512d");
GET_USER_DEF_TYPE_NAME("struct ");
GET_USER_DEF_TYPE_NAME ("struct ");
#undef PROCESS_CASE
}
@ -636,13 +639,13 @@ char* get_num(SStateInfo *state)
{
char *ptr = 0;
if (*state->buff_for_parsing >= '0' && *state->buff_for_parsing <= '8') {
ptr = (char *) malloc(2);
ptr = (char *) malloc (2);
ptr[0] = *state->buff_for_parsing + 1;
ptr[1] = '\0';
state->buff_for_parsing++;
state->amount_of_read_chars++;
} else if (*state->buff_for_parsing == '9') {
ptr = (char *) malloc(3);
ptr = (char *) malloc (3);
ptr[0] = '1';
ptr[1] = '0';
ptr[2] = '\0';
@ -661,8 +664,8 @@ char* get_num(SStateInfo *state)
if (*state->buff_for_parsing != '@')
return ptr;
ptr = (char *)malloc(16);
sprintf(ptr, "%u", ret);
ptr = (char *)malloc (16);
sprintf (ptr, "%u", ret);
state->buff_for_parsing++;
state->amount_of_read_chars++;
}
@ -680,11 +683,11 @@ char* get_num(SStateInfo *state)
\
state->state = eTCStateEnd; \
\
if (!init_type_code_str_struct(&tmp_str)) { \
if (!init_type_code_str_struct (&tmp_str)) { \
state->err = eTCStateMachineErrAlloc; \
return; \
} \
if (!init_type_code_str_struct(&modifier)) { \
if (!init_type_code_str_struct (&modifier)) { \
state->err = eTCStateMachineErrAlloc; \
return; \
} \
@ -699,13 +702,13 @@ char* get_num(SStateInfo *state)
case 'A': \
break; \
case 'B': \
copy_string(&modifier, "const ", 0); \
copy_string (&modifier, "const ", 0); \
break; \
case 'C': \
copy_string(&modifier, "volatile ", 0); \
copy_string (&modifier, "volatile ", 0); \
break; \
case 'D': \
copy_string(&modifier, "const volatile ", 0); \
copy_string (&modifier, "const volatile ", 0); \
break; \
default: \
state->err = eTCStateMachineErrUnsupportedTypeCode; \
@ -720,37 +723,37 @@ char* get_num(SStateInfo *state)
\
state->buff_for_parsing++; \
state->amount_of_read_chars++; \
if (!(n1 = get_num(state))) { \
if (!(n1 = get_num (state))) { \
goto MODIFIER_err; \
} \
num = atoi(n1); \
R_FREE(n1); \
num = atoi (n1); \
R_FREE (n1); \
\
copy_string(&tmp_str, " ", 0); \
copy_string(&tmp_str, "(", 0); \
copy_string(&tmp_str, modifier.type_str, modifier.curr_pos); \
copy_string(&tmp_str, modifier_str, 0); \
copy_string(&tmp_str, ")", 0); \
copy_string (&tmp_str, " ", 0); \
copy_string (&tmp_str, "(", 0); \
copy_string (&tmp_str, modifier.type_str, modifier.curr_pos); \
copy_string (&tmp_str, modifier_str, 0); \
copy_string (&tmp_str, ")", 0); \
\
while (num--) { \
n1 = get_num(state); \
copy_string(&tmp_str, "[", 0); \
copy_string(&tmp_str, n1, 0); \
copy_string(&tmp_str, "]", 0); \
R_FREE(n1); \
n1 = get_num (state); \
copy_string (&tmp_str, "[", 0); \
copy_string (&tmp_str, n1, 0); \
copy_string (&tmp_str, "]", 0); \
R_FREE (n1); \
} \
} \
\
if (tmp_str.curr_pos == 0) { \
copy_string(&tmp_str, " ", 0); \
copy_string(&tmp_str, modifier.type_str, modifier.curr_pos); \
copy_string(&tmp_str, modifier_str, 0); \
copy_string (&tmp_str, " ", 0); \
copy_string (&tmp_str, modifier.type_str, modifier.curr_pos); \
copy_string (&tmp_str, modifier_str, 0); \
if (flag__64ptr) { \
copy_string(&tmp_str, " __ptr64", 0); \
copy_string (&tmp_str, " __ptr64", 0); \
} \
} \
\
err = get_type_code_string(state->buff_for_parsing, &i, &tmp); \
err = get_type_code_string (state->buff_for_parsing, &i, &tmp); \
if (err != eDemanglerErrOK) { \
state->err = eTCStateMachineErrUnsupportedTypeCode; \
goto MODIFIER_err; \
@ -758,26 +761,26 @@ char* get_num(SStateInfo *state)
\
state->amount_of_read_chars += i; \
state->buff_for_parsing += i; \
copy_string(type_code_str, tmp, 0); \
copy_string(type_code_str, tmp_str.type_str, tmp_str.curr_pos); \
copy_string (type_code_str, tmp, 0); \
copy_string (type_code_str, tmp_str.type_str, tmp_str.curr_pos); \
\
MODIFIER_err: \
R_FREE(tmp); \
free_type_code_str_struct(&tmp_str); \
free_type_code_str_struct(&modifier); \
R_FREE (tmp); \
free_type_code_str_struct (&tmp_str); \
free_type_code_str_struct (&modifier); \
}
///////////////////////////////////////////////////////////////////////////////
DEF_STATE_ACTION(S)
{
MODIFIER("* const volatile");
MODIFIER ("* const volatile");
}
///////////////////////////////////////////////////////////////////////////////
DEF_STATE_ACTION(P)
{
// function pointer
if (isdigit((int)*state->buff_for_parsing)) {
if (isdigit ((int)*state->buff_for_parsing)) {
if (*state->buff_for_parsing++ == '6') {
char *call_conv = 0;
char *ret_type = 0;
@ -810,21 +813,21 @@ DEF_STATE_ACTION(P)
state->amount_of_read_chars += 2; // '6' + call_conv
// return type
err = get_type_code_string(state->buff_for_parsing, &i, &ret_type);
err = get_type_code_string (state->buff_for_parsing, &i, &ret_type);
if (err != eDemanglerErrOK) {
state->err = eTCStateMachineErrUnsupportedTypeCode;
goto FUNCTION_POINTER_err;
}
copy_string(type_code_str, ret_type, 0);
copy_string(type_code_str, " (", 0);
R_FREE(ret_type);
copy_string (type_code_str, ret_type, 0);
copy_string (type_code_str, " (", 0);
R_FREE (ret_type);
if (call_conv) {
copy_string(type_code_str, call_conv, 0);
copy_string (type_code_str, call_conv, 0);
}
copy_string(type_code_str, "*)(", 0);
copy_string (type_code_str, "*)(", 0);
state->amount_of_read_chars += i;
state->buff_for_parsing += i;
@ -834,15 +837,15 @@ DEF_STATE_ACTION(P)
while (*state->buff_for_parsing && *state->buff_for_parsing != 'Z') {
if (*state->buff_for_parsing != '@') {
if (i) {
copy_string(type_code_str, ", ", 0);
copy_string (type_code_str, ", ", 0);
}
err = get_type_code_string(state->buff_for_parsing, &i, &arg);
err = get_type_code_string (state->buff_for_parsing, &i, &arg);
if (err != eDemanglerErrOK) {
// abbreviation of type processing
if ((*state->buff_for_parsing >= '0') && (*state->buff_for_parsing <= '9')) {
ut32 id = (ut32)(*state->buff_for_parsing - '0');
arg = r_list_get_n(abbr_types, id);
arg = r_list_get_n (abbr_types, id);
if (!arg) {
state->err = eTCStateMachineErrUncorrectTypeCode;
goto FUNCTION_POINTER_err;
@ -856,13 +859,13 @@ DEF_STATE_ACTION(P)
}
if (i > 1) {
r_list_append(abbr_types, strdup(arg));
r_list_append (abbr_types, strdup (arg));
}
copy_string(type_code_str, arg, 0);
copy_string (type_code_str, arg, 0);
if (!is_abbr_type) {
R_FREE(arg);
R_FREE (arg);
is_abbr_type = 0;
}
@ -873,7 +876,7 @@ DEF_STATE_ACTION(P)
state->amount_of_read_chars++;
}
}
copy_string(type_code_str, ")", 0);
copy_string (type_code_str, ")", 0);
while (*state->buff_for_parsing == '@') {
state->buff_for_parsing++;
@ -894,22 +897,22 @@ DEF_STATE_ACTION(P)
}
}
MODIFIER("*");
MODIFIER ("*");
}
///////////////////////////////////////////////////////////////////////////////
DEF_STATE_ACTION(R) {
MODIFIER("* volatile");
MODIFIER ("* volatile");
}
///////////////////////////////////////////////////////////////////////////////
DEF_STATE_ACTION(Q) {
MODIFIER("* const");
MODIFIER ("* const");
}
///////////////////////////////////////////////////////////////////////////////
DEF_STATE_ACTION(A) {
MODIFIER("&");
MODIFIER ("&");
}
#undef MODIFIER
@ -925,30 +928,30 @@ static void tc_state_start(SStateInfo *state, STypeCodeStr *type_code_str) {
break; \
switch (*(state->buff_for_parsing)) {
ONE_LETTER_STATE(X)
ONE_LETTER_STATE(D)
ONE_LETTER_STATE(C)
ONE_LETTER_STATE(E)
ONE_LETTER_STATE(F)
ONE_LETTER_STATE(G)
ONE_LETTER_STATE(H)
ONE_LETTER_STATE(I)
ONE_LETTER_STATE(J)
ONE_LETTER_STATE(K)
ONE_LETTER_STATE(M)
ONE_LETTER_STATE(N)
ONE_LETTER_STATE(Z)
ONE_LETTER_STATE(_)
ONE_LETTER_STATE(T)
ONE_LETTER_STATE(U)
ONE_LETTER_STATE(W)
ONE_LETTER_STATE(V)
ONE_LETTER_STATE(O)
ONE_LETTER_STATE(S)
ONE_LETTER_STATE(P)
ONE_LETTER_STATE(R)
ONE_LETTER_STATE(Q)
ONE_LETTER_STATE(A)
ONE_LETTER_STATE (X)
ONE_LETTER_STATE (D)
ONE_LETTER_STATE (C)
ONE_LETTER_STATE (E)
ONE_LETTER_STATE (F)
ONE_LETTER_STATE (G)
ONE_LETTER_STATE (H)
ONE_LETTER_STATE (I)
ONE_LETTER_STATE (J)
ONE_LETTER_STATE (K)
ONE_LETTER_STATE (M)
ONE_LETTER_STATE (N)
ONE_LETTER_STATE (Z)
ONE_LETTER_STATE (_)
ONE_LETTER_STATE (T)
ONE_LETTER_STATE (U)
ONE_LETTER_STATE (W)
ONE_LETTER_STATE (V)
ONE_LETTER_STATE (O)
ONE_LETTER_STATE (S)
ONE_LETTER_STATE (P)
ONE_LETTER_STATE (R)
ONE_LETTER_STATE (Q)
ONE_LETTER_STATE (A)
default:
eprintf("[uncorrect type] error while parsing type\n");
@ -989,7 +992,7 @@ static int init_type_code_str_struct(STypeCodeStr *type_coder_str) {
}
memset (type_coder_str->type_str, 0, TYPE_STR_LEN * sizeof(char));
type_coder_str->curr_pos = 0; // strlen("unknown type");
type_coder_str->curr_pos = 0; // strlen ("unknown type");
// strncpy(type_coder_str->type_str, "unknown_type", type_coder_str->curr_pos);
return res;
@ -1039,12 +1042,12 @@ static EDemanglerErr get_type_code_string(char *sym, unsigned int *amount_of_rea
}
}
*str_type_code = strdup(type_code_str.type_str);
*str_type_code = strdup (type_code_str.type_str);
*amount_of_read_chars = state.amount_of_read_chars;
get_type_code_string_err:
R_FREE(tmp_sym);
free_type_code_str_struct(&type_code_str);
R_FREE (tmp_sym);
free_type_code_str_struct (&type_code_str);
return err;
}
@ -1110,14 +1113,14 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
case '3' : // Normal variable
case '4' : // Normal variable
i = 0;
err = get_type_code_string(curr_pos, &i, &tmp);
err = get_type_code_string (curr_pos, &i, &tmp);
if (err != eDemanglerErrOK) {
goto parse_microsoft_mangled_name_err;
}
curr_pos += i;
i = strlen(curr_pos);
i = strlen (curr_pos);
if (!i || i > 2) {
err = eDemanglerErrUncorrectMangledSymbol;
goto parse_microsoft_mangled_name_err;
@ -1139,10 +1142,10 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
}
switch (*curr_pos) {
SET_STORAGE_CLASS('A', 0);
SET_STORAGE_CLASS('B', "const");
SET_STORAGE_CLASS('C', "volatile");
SET_STORAGE_CLASS('D', "const volatile");
SET_STORAGE_CLASS ('A', 0);
SET_STORAGE_CLASS ('B', "const");
SET_STORAGE_CLASS ('C', "volatile");
SET_STORAGE_CLASS ('D', "const volatile");
default:
err = eDemanglerErrUncorrectMangledSymbol;
goto parse_microsoft_mangled_name_err;
@ -1178,24 +1181,24 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
break; \
}
/* Functions */
SET_ACCESS_MODIFIER('E', is_implicit_this_pointer, "private virtual");
SET_ACCESS_MODIFIER('F', is_implicit_this_pointer, "private virtual");
SET_ACCESS_MODIFIER('M', is_implicit_this_pointer, "protected virtual");
SET_ACCESS_MODIFIER('N', is_implicit_this_pointer, "protected virtual");
SET_ACCESS_MODIFIER('U', is_implicit_this_pointer, "public virtual");
SET_ACCESS_MODIFIER('V', is_implicit_this_pointer, "public virtual");
SET_ACCESS_MODIFIER('A', is_implicit_this_pointer, "private");
SET_ACCESS_MODIFIER('B', is_implicit_this_pointer, "private");
SET_ACCESS_MODIFIER('I', is_implicit_this_pointer, "protected");
SET_ACCESS_MODIFIER('J', is_implicit_this_pointer, "protected");
SET_ACCESS_MODIFIER('Q', is_implicit_this_pointer, "public");
SET_ACCESS_MODIFIER('R', is_implicit_this_pointer, "public");
SET_ACCESS_MODIFIER('C', is_static, "private: static");
SET_ACCESS_MODIFIER('D', is_static, "private: static");
SET_ACCESS_MODIFIER('K', is_static, "protected: static");
SET_ACCESS_MODIFIER('L', is_static, "protected: static");
SET_ACCESS_MODIFIER('S', is_static, "public: static");
SET_ACCESS_MODIFIER('T', is_static, "public: static");
SET_ACCESS_MODIFIER ('E', is_implicit_this_pointer, "private virtual");
SET_ACCESS_MODIFIER ('F', is_implicit_this_pointer, "private virtual");
SET_ACCESS_MODIFIER ('M', is_implicit_this_pointer, "protected virtual");
SET_ACCESS_MODIFIER ('N', is_implicit_this_pointer, "protected virtual");
SET_ACCESS_MODIFIER ('U', is_implicit_this_pointer, "public virtual");
SET_ACCESS_MODIFIER ('V', is_implicit_this_pointer, "public virtual");
SET_ACCESS_MODIFIER ('A', is_implicit_this_pointer, "private");
SET_ACCESS_MODIFIER ('B', is_implicit_this_pointer, "private");
SET_ACCESS_MODIFIER ('I', is_implicit_this_pointer, "protected");
SET_ACCESS_MODIFIER ('J', is_implicit_this_pointer, "protected");
SET_ACCESS_MODIFIER ('Q', is_implicit_this_pointer, "public");
SET_ACCESS_MODIFIER ('R', is_implicit_this_pointer, "public");
SET_ACCESS_MODIFIER ('C', is_static, "private: static");
SET_ACCESS_MODIFIER ('D', is_static, "private: static");
SET_ACCESS_MODIFIER ('K', is_static, "protected: static");
SET_ACCESS_MODIFIER ('L', is_static, "protected: static");
SET_ACCESS_MODIFIER ('S', is_static, "public: static");
SET_ACCESS_MODIFIER ('T', is_static, "public: static");
case 'Y' : // near
case 'Z' : // far
break;
@ -1279,12 +1282,12 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
// Return type, or @ if 'void'
if (*curr_pos == '@') {
ret_type = strdup("void");
ret_type = strdup ("void");
curr_pos++;
}
else {
i = 0;
err = get_type_code_string(curr_pos, &i, &ret_type);
err = get_type_code_string (curr_pos, &i, &ret_type);
if (err != eDemanglerErrOK) {
err = eDemanglerErrUncorrectMangledSymbol;
goto parse_microsoft_mangled_name_err;
@ -1299,11 +1302,11 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
while (*curr_pos && *curr_pos != 'Z')
{
if (*curr_pos != '@') {
err = get_type_code_string(curr_pos, &i, &tmp);
err = get_type_code_string (curr_pos, &i, &tmp);
if (err != eDemanglerErrOK) {
// abbreviation of type processing
if ((*curr_pos >= '0') && (*curr_pos <= '9')) {
tmp = r_list_get_n(abbr_types, (ut32)(*curr_pos - '0'));
tmp = r_list_get_n (abbr_types, (ut32)(*curr_pos - '0'));
if (!tmp) {
err = eDemanglerErrUncorrectMangledSymbol;
goto parse_microsoft_mangled_name_err;
@ -1318,25 +1321,25 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
curr_pos += i;
if (i > 1) {
r_list_append(abbr_types, strdup(tmp));
r_list_append (abbr_types, strdup (tmp));
}
str_arg = (SStrInfo *) malloc(sizeof(SStrInfo));
str_arg->str_ptr = strdup(tmp);
str_arg->len = strlen(tmp);
str_arg = (SStrInfo *) malloc (sizeof(SStrInfo));
str_arg->str_ptr = strdup (tmp);
str_arg->len = strlen (tmp);
r_list_append(func_args, str_arg);
r_list_append (func_args, str_arg);
if (strncmp(tmp, "void", 4) == 0) {
if (strncmp (tmp, "void", 4) == 0) {
// arguments list is void
if (!is_abbr_type) {
R_FREE(tmp);
R_FREE (tmp);
is_abbr_type = 0;
}
break;
}
if (!is_abbr_type) {
R_FREE(tmp);
R_FREE (tmp);
is_abbr_type = 0;
}
} else {
@ -1353,22 +1356,22 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
}
if (access_modifier) {
copy_string(&func_str, access_modifier, 0);
if (!strstr(access_modifier, "static")) {
copy_string(&func_str, ": ", 0);
copy_string (&func_str, access_modifier, 0);
if (!strstr (access_modifier, "static")) {
copy_string (&func_str, ": ", 0);
} else {
copy_string(&func_str, " ", 0);
copy_string (&func_str, " ", 0);
}
}
if (storage_class_code_for_ret) {
copy_string(&func_str, storage_class_code_for_ret, 0);
copy_string(&func_str, " ", 0);
copy_string (&func_str, storage_class_code_for_ret, 0);
copy_string (&func_str, " ", 0);
}
if (ret_type) {
copy_string(&func_str, ret_type, 0);
copy_string(&func_str, " ", 0);
copy_string (&func_str, ret_type, 0);
copy_string (&func_str, " ", 0);
}
if (call_conv) {
@ -1380,12 +1383,12 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
copy_string (&func_str, type_code_str.type_str, type_code_str.curr_pos);
}
if (r_list_length(func_args)) {
copy_string(&func_str, "(", 0);
i = r_list_length(func_args);
if (r_list_length (func_args)) {
copy_string (&func_str, "(", 0);
i = r_list_length (func_args);
it = r_list_iterator (func_args);
r_list_foreach (func_args, it, str_arg) {
copy_string(&func_str, str_arg->str_ptr, 0);
copy_string (&func_str, str_arg->str_ptr, 0);
if (--i) {
copy_string (&func_str, ", ", 0);
}
@ -1404,10 +1407,10 @@ static EDemanglerErr parse_microsoft_mangled_name(char *sym, char **demangled_na
*demangled_name = strdup (func_str.type_str);
parse_microsoft_mangled_name_err:
R_FREE(ret_type);
free_type_code_str_struct(&type_code_str);
free_type_code_str_struct(&func_str);
r_list_free(func_args);
R_FREE (ret_type);
free_type_code_str_struct (&type_code_str);
free_type_code_str_struct (&func_str);
r_list_free (func_args);
return err;
}

View File

@ -110,8 +110,8 @@ static RList *entries(RBinFile *arch) {
if (!(ret = r_list_newf (free))) {
return NULL;
}
ptr = r_coff_get_entry(obj);
r_list_append(ret, ptr);
ptr = r_coff_get_entry (obj);
r_list_append (ret, ptr);
return ret;
}

View File

@ -348,7 +348,7 @@ static void dex_parse_debug_item(RBinFile *binfile, RBinDexObj *bin,
struct dex_debug_local_t *debug_locals = calloc (sizeof (struct dex_debug_local_t), regsz + 1);
if (!(MA & 0x0008)) {
debug_locals[argReg].name = "this";
debug_locals[argReg].descriptor = r_str_newf("%s;", class_name);
debug_locals[argReg].descriptor = r_str_newf ("%s;", class_name);
debug_locals[argReg].startAddress = 0;
debug_locals[argReg].signature = NULL;
debug_locals[argReg].live = true;

View File

@ -56,7 +56,7 @@ void parse_fpo_stream(void *stream, R_STREAM_FILE *stream_file)
break;
}
r_list_append(fpo_stream->fpo_data_list, fpo_data);
r_list_append (fpo_stream->fpo_data_list, fpo_data);
}
free(data);

View File

@ -12,24 +12,28 @@ void parse_pe_stream(void *stream, R_STREAM_FILE *stream_file)
SPEStream *pe_stream = (SPEStream *) stream;
int sctn_header_size =0;
stream_file_get_size(stream_file, &data_size);
data = (char *) malloc(data_size);
if (!data) return;
stream_file_get_data(stream_file, data);
stream_file_get_size (stream_file, &data_size);
data = (char *) malloc (data_size);
if (!data) {
return;
}
stream_file_get_data (stream_file, data);
sctn_header_size = sizeof(SIMAGE_SECTION_HEADER);
sctn_header_size = sizeof (SIMAGE_SECTION_HEADER);
ptmp = data;
pe_stream->sections_hdrs = r_list_new();
pe_stream->sections_hdrs = r_list_new ();
while (read_bytes < data_size) {
sctn_header = (SIMAGE_SECTION_HEADER *) malloc (sctn_header_size);
if (!sctn_header) break;
memcpy(sctn_header, ptmp, sctn_header_size);
if (!sctn_header) {
break;
}
memcpy (sctn_header, ptmp, sctn_header_size);
ptmp += sctn_header_size;
r_list_append(pe_stream->sections_hdrs, sctn_header);
r_list_append (pe_stream->sections_hdrs, sctn_header);
read_bytes += sctn_header_size;
}
free(data);
free (data);
}
///////////////////////////////////////////////////////////////////////////////
@ -39,10 +43,10 @@ void free_pe_stream(void *stream)
SIMAGE_SECTION_HEADER *sctn_header = 0;
RListIter *it = 0;
it = r_list_iterator(pe_stream->sections_hdrs);
while (r_list_iter_next(it)) {
sctn_header = (SIMAGE_SECTION_HEADER *) r_list_iter_get(it);
free(sctn_header);
it = r_list_iterator (pe_stream->sections_hdrs);
while (r_list_iter_next (it)) {
sctn_header = (SIMAGE_SECTION_HEADER *) r_list_iter_get (it);
free (sctn_header);
}
r_list_free(pe_stream->sections_hdrs);
r_list_free (pe_stream->sections_hdrs);
}

View File

@ -27,7 +27,7 @@ static void color_line(const char *line, RStrpool *p, RList *ml){
m_addr = r_str_ndup (line + m->rm_so, m_len);
if (m_addr) {
/* in case there's a CSI in the middle of this match*/
m_len = r_str_ansi_filter(m_addr, NULL, NULL, m_len);
m_len = r_str_ansi_filter (m_addr, NULL, NULL, m_len);
if (m_len<0) m_len = 0;
r_strpool_memcat (p, m_addr, m_len);
r_strpool_memcat (p, inv[1], linv[1]);

View File

@ -1533,9 +1533,9 @@ R_API const char *r_core_anal_optype_colorfor(RCore *core, ut64 addr, bool verbo
static void r_core_setenv (RCore *core) {
char *e = r_sys_getenv ("PATH");
#if __WINDOWS__ && !__CYGWIN__
char *h = r_str_home(".config\\radare2\\prefix\\bin;");
char *h = r_str_home (".config\\radare2\\prefix\\bin;");
#else
char *h = r_str_home(".config/radare2/prefix/bin:");
char *h = r_str_home (".config/radare2/prefix/bin:");
#endif
char *n = r_str_newf ("%s%s", h, e);
r_sys_setenv ("PATH", n);

View File

@ -18,7 +18,7 @@ static int lang_lib_file_run (RLang *user, const char *file) {
libpath = r_str_prefix (libpath, "./");
}
if (!r_file_exists (libpath)) {
if (!r_str_endswith(libpath, R_LIB_EXT)) {
if (!r_str_endswith (libpath, R_LIB_EXT)) {
libpath = r_str_appendf (libpath, ".%s", R_LIB_EXT);
}
}

View File

@ -201,7 +201,7 @@ static int parse(RParse *p, const char *data, char *str) {
{
char *p = strdup (str);
p = r_str_replace (p, "+ -", "- ", 0);
p = r_str_replace(p, " + ]", " + 0]", 0);
p = r_str_replace (p, " + ]", " + 0]", 0);
#if EXPERIMENTAL_ZERO
p = r_str_replace (p, "zero", "0", 0);
if (!memcmp (p, "0 = ", 4)) *p = 0; // nop

View File

@ -66,12 +66,12 @@ R_API int r_strpool_memcat(RStrpool *p, const char *s, int len) {
R_API int r_strpool_append(RStrpool *p, const char *s) {
int l = strlen (s) + 1;
return r_strpool_memcat(p, s, l);
return r_strpool_memcat (p, s, l);
}
R_API int r_strpool_ansi_chop(RStrpool *p, int n){
/* p->str need not be a c-string */
int i = r_str_ansi_chop(p->str, p->len, n);
int i = r_str_ansi_chop (p->str, p->len, n);
p->len = i;
return i;
}