mirror of
https://github.com/capstone-engine/capstone.git
synced 2025-03-03 20:07:21 +00:00
x86: fix operand sizes of LGDT/LIDT/SGDT/SIDT in 16bit mode
This commit is contained in:
parent
4337a77064
commit
7b714c64dc
@ -65,49 +65,51 @@ static void printopaquemem(MCInst *MI, unsigned OpNo, SStream *O)
|
||||
{
|
||||
switch(MI->csh->mode) {
|
||||
case CS_MODE_16:
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 2;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 4;
|
||||
break;
|
||||
}
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 2;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
MI->x86opsize = 4;
|
||||
break;
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 6;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CS_MODE_32:
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 4;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 6;
|
||||
break;
|
||||
}
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 4;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 6;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CS_MODE_64:
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 8;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 10;
|
||||
break;
|
||||
}
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 8;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 10;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default: // never reach
|
||||
break;
|
||||
|
@ -63,64 +63,66 @@ static void set_mem_access(MCInst *MI, bool status)
|
||||
|
||||
static void printopaquemem(MCInst *MI, unsigned OpNo, SStream *O)
|
||||
{
|
||||
// FIXME: do this with autogen
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
SStream_concat0(O, "ptr ");
|
||||
break;
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
// do not print "ptr"
|
||||
break;
|
||||
}
|
||||
// FIXME: do this with autogen
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
SStream_concat0(O, "ptr ");
|
||||
break;
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
// do not print "ptr"
|
||||
break;
|
||||
}
|
||||
|
||||
switch(MI->csh->mode) {
|
||||
case CS_MODE_16:
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 2;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 4;
|
||||
break;
|
||||
}
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 2;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
MI->x86opsize = 4;
|
||||
break;
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 6;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CS_MODE_32:
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 4;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 6;
|
||||
break;
|
||||
}
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 4;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 6;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CS_MODE_64:
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 8;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 10;
|
||||
break;
|
||||
}
|
||||
switch(MI->flat_insn->id) {
|
||||
default:
|
||||
MI->x86opsize = 8;
|
||||
break;
|
||||
case X86_INS_LJMP:
|
||||
case X86_INS_LCALL:
|
||||
case X86_INS_SGDT:
|
||||
case X86_INS_SIDT:
|
||||
case X86_INS_LGDT:
|
||||
case X86_INS_LIDT:
|
||||
MI->x86opsize = 10;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default: // never reach
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user