Changeset 103698 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Mar 6, 2024 10:20:15 AM (12 months ago)
- svn:sync-xref-src-repo-rev:
- 162065
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore-x86-amd64.cpp
r103511 r103698 2029 2029 uint8_t rm = MODRM_RM(modrm); 2030 2030 2031 if (mod == 3 && rm == 0) 2032 pOp = &g_aMapX86_Group7_mod11_rm000[reg]; 2033 else 2034 if (mod == 3 && rm == 1) 2035 pOp = &g_aMapX86_Group7_mod11_rm001[reg]; 2036 else 2031 if (mod != 3) 2037 2032 pOp = &g_aMapX86_Group7_mem[reg]; 2033 else if (reg == 0) 2034 pOp = &g_aMapX86_Group7_mod11_reg000[rm]; 2035 else if (reg == 1) 2036 pOp = &g_aMapX86_Group7_mod11_reg001[rm]; 2037 else if (reg == 2) 2038 pOp = &g_aMapX86_Group7_mod11_reg010[rm]; 2039 else if (reg == 7) 2040 pOp = &g_aMapX86_Group7_mod11_reg111[rm]; 2041 else if (reg == 4 || reg == 6) 2042 pOp = &g_aMapX86_Group7_mem[reg]; 2043 else 2044 pOp = &g_InvalidOpcode[0]; 2038 2045 2039 2046 /* Cannot easily skip this hack because of monitor and vmcall! */ -
trunk/src/VBox/Disassembler/DisasmInternal-x86-amd64.h
r103511 r103698 192 192 extern const DISOPCODE g_aMapX86_Group6[8]; 193 193 extern const DISOPCODE g_aMapX86_Group7_mem[8]; 194 extern const DISOPCODE g_aMapX86_Group7_mod11_rm000[8]; 195 extern const DISOPCODE g_aMapX86_Group7_mod11_rm001[8]; 194 extern const DISOPCODE g_aMapX86_Group7_mod11_reg000[8]; 195 extern const DISOPCODE g_aMapX86_Group7_mod11_reg001[8]; 196 extern const DISOPCODE g_aMapX86_Group7_mod11_reg010[8]; 197 extern const DISOPCODE g_aMapX86_Group7_mod11_reg111[8]; 196 198 extern const DISOPCODE g_aMapX86_Group8[8]; 197 199 extern const DISOPCODE g_aMapX86_Group9[8]; -
trunk/src/VBox/Disassembler/DisasmTables-x86-amd64.cpp
r103599 r103698 3057 3057 }; 3058 3058 3059 /* Note!! Group 7 is NOT using the INVALID_OPCODE_MOD_RM because of monitor and vmcall. */ 3060 const DISOPCODE g_aMapX86_Group7_mod11_rm000[8] = 3061 { 3062 /* 0F 01 MOD=11b */ 3063 INVALID_OPCODE, 3064 OP("monitor %eAX,%eCX,%eDX", IDX_ParseFixedReg, IDX_ParseFixedReg, IDX_ParseFixedReg, OP_MONITOR, OP_PARM_REG_EAX, OP_PARM_REG_ECX, OP_PARM_REG_EDX, DISOPTYPE_HARMLESS ), 3059 const DISOPCODE g_aMapX86_Group7_mod11_reg000[8] = 3060 { 3061 OP("enclv", 0, 0, 0, OP_ENCLV, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3062 OP("vmcall", 0, 0, 0, OP_VMCALL, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3063 OP("vmlaunch", 0, 0, 0, OP_VMLAUNCH, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3064 OP("vmresume", 0, 0, 0, OP_VMRESUME, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3065 OP("vmoff", 0, 0, 0, OP_VMOFF, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3066 INVALID_OPCODE, 3067 INVALID_OPCODE, 3068 INVALID_OPCODE, 3069 }; 3070 3071 const DISOPCODE g_aMapX86_Group7_mod11_reg001[8] = 3072 { 3073 OP("monitor %eAX,%eCX,%eDX", IDX_ParseFixedReg, IDX_ParseFixedReg, IDX_ParseFixedReg, OP_MONITOR, OP_PARM_REG_EAX, OP_PARM_REG_ECX, OP_PARM_REG_EDX, DISOPTYPE_HARMLESS ), 3074 OP("mwait %eAX,%eCX", IDX_ParseFixedReg, IDX_ParseFixedReg, 0, OP_MWAIT, OP_PARM_REG_EAX, OP_PARM_REG_ECX, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3075 OP("clac", 0, 0, 0, OP_CLAC, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3076 OP("stac", 0, 0, 0, OP_STAC, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3077 INVALID_OPCODE, 3078 INVALID_OPCODE, 3079 INVALID_OPCODE, 3080 OP("encls", 0, 0, 0, OP_ENCLS, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3081 }; 3082 3083 const DISOPCODE g_aMapX86_Group7_mod11_reg010[8] = 3084 { 3065 3085 OP("xgetbv", 0, 0, 0, OP_XGETBV, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), /* fixed ops: ECX & EDX:EAX like wrmsr we don't details these */ 3066 INVALID_OPCODE,3067 OP("smsw %Ew", IDX_ParseModRM, 0, 0, OP_SMSW, OP_PARM_Ew, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP),3068 INVALID_OPCODE,3069 OP("lmsw %Ew", IDX_ParseModRM, 0, 0, OP_LMSW, OP_PARM_Ew, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED),3070 OP("swapgs", 0, 0, 0, OP_SWAPGS, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS )3071 };3072 3073 /* Note!! Group 7 is NOT using the INVALID_OPCODE_MOD_RM because of monitor and vmcall. */3074 const DISOPCODE g_aMapX86_Group7_mod11_rm001[8] =3075 {3076 /* 0F 01 MOD=11b */3077 OP("vmcall", 0, 0, 0, OP_VMCALL, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ),3078 OP("mwait %eAX,%eCX", IDX_ParseFixedReg, IDX_ParseFixedReg, 0, OP_MWAIT, OP_PARM_REG_EAX, OP_PARM_REG_ECX,OP_PARM_NONE, DISOPTYPE_HARMLESS ),3079 3086 OP("xsetbv", 0, 0, 0, OP_XSETBV, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), /* fixed ops: ECX & EDX:EAX like wrmsr we don't details these */ 3080 OP("vmmcall", 0, 0, 0, OP_VMMCALL, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3081 OP("smsw %Ew", IDX_ParseModRM, 0, 0, OP_SMSW, OP_PARM_Ew, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP), 3082 INVALID_OPCODE, 3083 OP("lmsw %Ew", IDX_ParseModRM, 0, 0, OP_LMSW, OP_PARM_Ew, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED), 3084 OP("rdtscp", 0, 0, 0, OP_RDTSCP, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_POTENTIALLY_DANGEROUS ), 3087 INVALID_OPCODE, 3088 INVALID_OPCODE, 3089 OP("vmfunc", 0, 0, 0, OP_VMFUNC, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3090 OP("xend", 0, 0, 0, OP_XEND, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3091 OP("xtest", 0, 0, 0, OP_XTEST, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3092 OP("enclu", 0, 0, 0, OP_ENCLU, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3093 }; 3094 3095 const DISOPCODE g_aMapX86_Group7_mod11_reg111[8] = 3096 { 3097 OP("swapgs", 0, 0, 0, OP_SWAPGS, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS ), 3098 OP("rdtscp", 0, 0, 0, OP_RDTSCP, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_POTENTIALLY_DANGEROUS ), 3099 INVALID_OPCODE, 3100 INVALID_OPCODE, 3101 INVALID_OPCODE, 3102 INVALID_OPCODE, 3103 INVALID_OPCODE, 3104 INVALID_OPCODE, 3085 3105 }; 3086 3106 -
trunk/src/VBox/Disassembler/testcase/tstDisasm-1A.asm
r103599 r103698 490 490 vpsrldq xmm1, xmm2, 3 491 491 492 ; group 7 stuff. 493 vmcall 494 vmlaunch 495 vmresume 496 vmxoff 497 monitor 498 mwait 499 clac 500 stac 501 encls 502 xgetbv 503 xsetbv 504 vmfunc 505 xend 506 xtest 507 enclu 508 swpgs 509 rdtscp 510 492 511 ret 493 512 ENDPROC TestProc64
Note:
See TracChangeset
for help on using the changeset viewer.