Skip to content

Commit edb1ac7

Browse files
authored
Update read/written registers for x86 conditional jump instructions (#2798)
* All JMPcc read and write instruction pointer * JMPcc, 16-bit decode * JMPcc, 32-bit decode * JMPcc, 64-bit decode
1 parent dba0a4f commit edb1ac7

File tree

4 files changed

+1650
-106
lines changed

4 files changed

+1650
-106
lines changed

arch/X86/X86Mapping.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,6 +1243,31 @@ void X86_get_insn_id(cs_struct *h, cs_insn *insn, unsigned int id)
12431243
->groups[insn->detail->groups_count] =
12441244
X86_GRP_JUMP;
12451245
insn->detail->groups_count++;
1246+
1247+
switch (h->mode) {
1248+
default:
1249+
break;
1250+
case CS_MODE_16:
1251+
arr_replace(
1252+
insn->detail->regs_read,
1253+
insn->detail->regs_read_count,
1254+
X86_REG_EIP, X86_REG_IP);
1255+
arr_replace(
1256+
insn->detail->regs_write,
1257+
insn->detail->regs_write_count,
1258+
X86_REG_EIP, X86_REG_IP);
1259+
break;
1260+
case CS_MODE_64:
1261+
arr_replace(
1262+
insn->detail->regs_read,
1263+
insn->detail->regs_read_count,
1264+
X86_REG_EIP, X86_REG_RIP);
1265+
arr_replace(
1266+
insn->detail->regs_write,
1267+
insn->detail->regs_write_count,
1268+
X86_REG_EIP, X86_REG_RIP);
1269+
break;
1270+
}
12461271
}
12471272

12481273
switch (insns[i].id) {

0 commit comments

Comments
 (0)