From 08096172cc8f314b5aa154b6ac240113468af9fd Mon Sep 17 00:00:00 2001 From: Andrei Vlad LUTAS Date: Tue, 31 Aug 2021 13:37:50 +0300 Subject: [PATCH] Multiple improvements - New shemu flag - SHEMU_FLAG_SIDT, set when sheu encounters a SIDT in ring0. - Added the CET Tracked flag to SYSCLAL, SYSENTER and INT n instructions. - Fixed Do Not Track prefix recognition for CALL and JMP in long-mode. - Fixed MONITOR and MONITORX implicit operands - the rAX register encodes a virtual address that will be used as the monitored range. That address is subject to a 1 byte load. - Fixed RMPADJUST and RMPUPDATE implicit operands - the rAX register encodes a virtual address, and the rCX register encodes a virtual address of the RMP updated entry. --- bddisasm/bddisasm.c | 58 +++- bddisasm/include/instructions.h | 23 +- bddisasm/include/tabledefs.h | 2 + bddisasm_test/basic/basic2_64.result | 3 +- bddisasm_test/basic/branch_16.result | 4 +- bddisasm_test/basic/branch_32.result | 6 +- bddisasm_test/basic/branch_64.result | 6 +- bddisasm_test/basic/snp_64.result | 13 +- bddisasm_test/cet/dnt_32 | 1 + bddisasm_test/cet/dnt_32.asm | 28 ++ bddisasm_test/cet/dnt_32.result | 273 +++++++++++++++++++ bddisasm_test/cet/dnt_64 | 1 + bddisasm_test/cet/dnt_64.asm | 28 ++ bddisasm_test/cet/dnt_64.result | 273 +++++++++++++++++++ bddisasm_test/special/invalid_32_skip.result | 2 +- bddisasm_test/special/only_64.result | 2 +- bddisasm_test/special/regressions_32.result | 2 +- bdshemu_test/bdshemu_test.zip | Bin 75890 -> 80935 bytes inc/bdshemu.h | 1 + inc/version.h | 2 +- isagenerator/disasmlib.py | 2 + isagenerator/generate_tables.py | 2 + isagenerator/instructions/table_0F.dat | 12 +- isagenerator/instructions/table_base.dat | 6 +- pybddisasm/setup.py | 2 +- 25 files changed, 701 insertions(+), 51 deletions(-) create mode 100644 bddisasm_test/cet/dnt_32 create mode 100644 bddisasm_test/cet/dnt_32.asm create mode 100644 bddisasm_test/cet/dnt_32.result create mode 100644 bddisasm_test/cet/dnt_64 create mode 100644 bddisasm_test/cet/dnt_64.asm create mode 100644 bddisasm_test/cet/dnt_64.result diff --git a/bddisasm/bddisasm.c b/bddisasm/bddisasm.c index 3b3e6cb..d550dd3 100644 --- a/bddisasm/bddisasm.c +++ b/bddisasm/bddisasm.c @@ -215,6 +215,8 @@ static const uint16_t gOperandMap[] = ND_OPE_S, // ND_OPT_SSE_XMM6 ND_OPE_S, // ND_OPT_SSE_XMM7 + ND_OPE_S, // ND_OPT_MEM_rAX (as used by MONITOR, MONITORX and RMPADJUST) + ND_OPE_S, // ND_OPT_MEM_rCX (as used by RMPUPDATE) ND_OPE_S, // ND_OPT_MEM_rBX_AL (as used by XLAT) ND_OPE_S, // ND_OPT_MEM_rDI (as used by masked moves) ND_OPE_S, // ND_OPT_MEM_SHS @@ -733,10 +735,26 @@ NdFetchPrefixes( case ND_PREFIX_G2_SEG_GS: if (ND_CODE_64 == Instrux->DefCode) { - // Do not overwrite FS/GS with ES/CS/DS/SS in 64 bit mode. In 64 bit mode, only FS/GS overrides - // are considered. - if (prefix == ND_PREFIX_G2_SEG_FS || prefix == ND_PREFIX_G2_SEG_GS) + if (prefix == ND_PREFIX_G2_SEG_FS || + prefix == ND_PREFIX_G2_SEG_GS) { + // The last FS/GS is always used, if present. + Instrux->Seg = prefix; + Instrux->HasSeg = true; + } + else if (prefix == ND_PREFIX_G2_NO_TRACK && + Instrux->Seg != ND_PREFIX_G2_SEG_FS && + Instrux->Seg != ND_PREFIX_G2_SEG_GS) + { + // The Do Not Track prefix is considered only if there isn't a FS/GS prefix. + Instrux->Seg = prefix; + Instrux->HasSeg = true; + } + else if (Instrux->Seg != ND_PREFIX_G2_SEG_FS && + Instrux->Seg != ND_PREFIX_G2_SEG_GS && + Instrux->Seg != ND_PREFIX_G2_NO_TRACK) + { + // All other prefixes are considered if Do Not Track, FS, GS are not present. Instrux->Seg = prefix; Instrux->HasSeg = true; } @@ -746,11 +764,6 @@ NdFetchPrefixes( Instrux->Seg = prefix; Instrux->HasSeg = true; } - if (prefix == ND_PREFIX_G2_BR_TAKEN || prefix == ND_PREFIX_G2_BR_NOT_TAKEN) - { - Instrux->Bhint = prefix; - Instrux->HasSeg = true; - } morePrefixes = true; break; case ND_PREFIX_G3_OPERAND_SIZE: @@ -2909,6 +2922,28 @@ memory: operand->Info.Memory.Seg = NdGetSegOverride(Instrux, NDR_DS); break; + case ND_OPT_MEM_rAX: + // [rAX], used implicitly by MONITOR, MONITORX and RMPADJUST instructions. + Instrux->MemoryAccess |= operand->Access.Access; + operand->Type = ND_OP_MEM; + operand->Info.Memory.HasBase = true; + operand->Info.Memory.BaseSize = 2 << Instrux->AddrMode; + operand->Info.Memory.Base = NDR_RAX; // Always rAX. + operand->Info.Memory.HasSeg = true; + operand->Info.Memory.Seg = NdGetSegOverride(Instrux, NDR_DS); + break; + + case ND_OPT_MEM_rCX: + // [rCX], used implicitly by RMPUPDATE. + Instrux->MemoryAccess |= operand->Access.Access; + operand->Type = ND_OP_MEM; + operand->Info.Memory.HasBase = true; + operand->Info.Memory.BaseSize = 2 << Instrux->AddrMode; + operand->Info.Memory.Base = NDR_RCX; // Always rCX. + operand->Info.Memory.HasSeg = true; + operand->Info.Memory.Seg = NdGetSegOverride(Instrux, NDR_DS); + break; + case ND_OPT_MEM_SHS: // Shadow stack access using the current SSP. Instrux->MemoryAccess |= operand->Access.Access; @@ -4231,10 +4266,9 @@ NdDecodeWithContext( Instrux->IsRepeated = ((Instrux->Rep != 0) && (ND_REP_SUPPORT(Instrux) || ND_REPC_SUPPORT(Instrux))); // Check if the instruction is CET tracked. The do not track prefix (0x3E) works only for indirect near JMP and CALL - // via register. It is always enabled for indirect far JMP and CALL or near indirect JMP and CALL via memoery. + // instructions. It is always enabled for far JMP and CALL instructions. Instrux->IsCetTracked = ND_HAS_CETT(Instrux) && ((!ND_DNT_SUPPORT(Instrux)) || - (Instrux->Seg != ND_PREFIX_G2_NO_TRACK) || - (Instrux->HasModRm && (Instrux->ModRm.mod != 3))); + (Instrux->Seg != ND_PREFIX_G2_NO_TRACK)); // Do instruction validations. These checks are made in order to filter out encodings that would normally // be invalid and would generate #UD. @@ -4391,7 +4425,7 @@ NdToText( if (Instrux->HasSeg && ND_BHINT_SUPPORT(Instrux)) { - switch (Instrux->Bhint) + switch (Instrux->Seg) { case ND_PREFIX_G2_BR_TAKEN: res = nd_strcat_s(Buffer, BufferSize, "BHT "); diff --git a/bddisasm/include/instructions.h b/bddisasm/include/instructions.h index 62e89e1..e476a02 100644 --- a/bddisasm/include/instructions.h +++ b/bddisasm/include/instructions.h @@ -7316,7 +7316,7 @@ const ND_INSTRUCTION gInstructions[2701] = ND_INS_INT, ND_CAT_INTERRUPT, ND_SET_I86, 291, 0, ND_MOD_R0|ND_MOD_R1|ND_MOD_R2|ND_MOD_R3|ND_MOD_REAL|ND_MOD_V8086|ND_MOD_PROT|ND_MOD_COMPAT|ND_MOD_LONG|ND_MOD_VMXR|ND_MOD_VMXN|ND_MOD_VMXR_SEAM|ND_MOD_VMXN_SEAM|ND_MOD_VMX_OFF|ND_MOD_SMM|ND_MOD_SMM_OFF|ND_MOD_SGX_OFF|ND_MOD_TSX|ND_MOD_TSX_OFF, - 0, ND_OPS_CNT(1, 5), 0, 0, 0, 0, 0, 0, 0, 0, + 0, ND_OPS_CNT(1, 5), 0, 0, 0, 0, 0, 0, ND_FLAG_CETT, 0, 0|NDR_RFLAG_VM, 0|NDR_RFLAG_VM|NDR_RFLAG_IF|NDR_RFLAG_NT|NDR_RFLAG_AC|NDR_RFLAG_RF|NDR_RFLAG_TF, 0, @@ -7354,7 +7354,7 @@ const ND_INSTRUCTION gInstructions[2701] = ND_INS_INT3, ND_CAT_INTERRUPT, ND_SET_I86, 293, 0, ND_MOD_R0|ND_MOD_R1|ND_MOD_R2|ND_MOD_R3|ND_MOD_REAL|ND_MOD_V8086|ND_MOD_PROT|ND_MOD_COMPAT|ND_MOD_LONG|ND_MOD_VMXR|ND_MOD_VMXN|ND_MOD_VMXR_SEAM|ND_MOD_VMXN_SEAM|ND_MOD_VMX_OFF|ND_MOD_SMM|ND_MOD_SMM_OFF|ND_MOD_SGX_OFF|ND_MOD_TSX|ND_MOD_TSX_OFF, - 0, ND_OPS_CNT(0, 5), 0, 0, 0, 0, 0, 0, 0, 0, + 0, ND_OPS_CNT(0, 5), 0, 0, 0, 0, 0, 0, ND_FLAG_CETT, 0, 0|NDR_RFLAG_VM, 0|NDR_RFLAG_VM|NDR_RFLAG_IF|NDR_RFLAG_NT|NDR_RFLAG_AC|NDR_RFLAG_RF|NDR_RFLAG_TF, 0, @@ -7373,7 +7373,7 @@ const ND_INSTRUCTION gInstructions[2701] = ND_INS_INTO, ND_CAT_INTERRUPT, ND_SET_I86, 294, 0, ND_MOD_R0|ND_MOD_R1|ND_MOD_R2|ND_MOD_R3|ND_MOD_REAL|ND_MOD_V8086|ND_MOD_PROT|ND_MOD_COMPAT|ND_MOD_VMXR|ND_MOD_VMXN|ND_MOD_VMXR_SEAM|ND_MOD_VMXN_SEAM|ND_MOD_VMX_OFF|ND_MOD_SMM|ND_MOD_SMM_OFF|ND_MOD_SGX_OFF|ND_MOD_TSX|ND_MOD_TSX_OFF, - 0, ND_OPS_CNT(0, 5), 0, 0, 0, 0, 0, 0, ND_FLAG_I64, 0, + 0, ND_OPS_CNT(0, 5), 0, 0, 0, 0, 0, 0, ND_FLAG_CETT|ND_FLAG_I64, 0, 0|NDR_RFLAG_VM, 0|NDR_RFLAG_VM|NDR_RFLAG_IF|NDR_RFLAG_NT|NDR_RFLAG_AC|NDR_RFLAG_RF|NDR_RFLAG_TF, 0, @@ -10276,7 +10276,7 @@ const ND_INSTRUCTION gInstructions[2701] = 0, 0, { - OP(ND_OPT_GPR_rAX, ND_OPS_d, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), + OP(ND_OPT_MEM_rAX, ND_OPS_b, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), OP(ND_OPT_GPR_rCX, ND_OPS_d, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), OP(ND_OPT_GPR_rDX, ND_OPS_d, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), }, @@ -10293,7 +10293,7 @@ const ND_INSTRUCTION gInstructions[2701] = 0, 0, { - OP(ND_OPT_GPR_rAX, ND_OPS_d, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), + OP(ND_OPT_MEM_rAX, ND_OPS_b, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), OP(ND_OPT_GPR_rCX, ND_OPS_d, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), OP(ND_OPT_GPR_rDX, ND_OPS_d, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), }, @@ -19031,13 +19031,14 @@ const ND_INSTRUCTION gInstructions[2701] = ND_INS_RMPADJUST, ND_CAT_SYSTEM, ND_SET_SNP, 684, 0, ND_MOD_R0|ND_MOD_LONG|ND_MOD_VMXR|ND_MOD_VMXN|ND_MOD_VMXR_SEAM|ND_MOD_VMXN_SEAM|ND_MOD_VMX_OFF|ND_MOD_SMM|ND_MOD_SMM_OFF|ND_MOD_SGX_OFF|ND_MOD_TSX|ND_MOD_TSX_OFF, - 0, ND_OPS_CNT(0, 4), 0, 0, 0, 0, 0, 0, ND_FLAG_MODRM|ND_FLAG_O64, ND_CFF_SNP, + 0, ND_OPS_CNT(0, 5), 0, 0, 0, 0, 0, 0, ND_FLAG_I67|ND_FLAG_MODRM|ND_FLAG_O64, ND_CFF_SNP, 0, 0|NDR_RFLAG_OF|NDR_RFLAG_ZF|NDR_RFLAG_AF|NDR_RFLAG_PF|NDR_RFLAG_SF, 0, 0, { - OP(ND_OPT_GPR_rAX, ND_OPS_q, ND_OPF_DEFAULT, ND_OPA_RW, 0, 0), + OP(ND_OPT_MEM_rAX, ND_OPS_b, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), + OP(ND_OPT_GPR_rAX, ND_OPS_d, ND_OPF_DEFAULT, ND_OPA_RW, 0, 0), OP(ND_OPT_GPR_rCX, ND_OPS_q, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), OP(ND_OPT_GPR_rDX, ND_OPS_q, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), OP(ND_OPT_F, ND_OPS_v, ND_OPF_DEFAULT, ND_OPA_W, 0, 0), @@ -19049,14 +19050,14 @@ const ND_INSTRUCTION gInstructions[2701] = ND_INS_RMPUPDATE, ND_CAT_SYSTEM, ND_SET_SNP, 685, 0, ND_MOD_R0|ND_MOD_LONG|ND_MOD_VMXR|ND_MOD_VMXN|ND_MOD_VMXR_SEAM|ND_MOD_VMXN_SEAM|ND_MOD_VMX_OFF|ND_MOD_SMM|ND_MOD_SMM_OFF|ND_MOD_SGX_OFF|ND_MOD_TSX|ND_MOD_TSX_OFF, - 0, ND_OPS_CNT(0, 3), 0, 0, 0, 0, 0, 0, ND_FLAG_MODRM|ND_FLAG_O64, ND_CFF_SNP, + 0, ND_OPS_CNT(0, 3), 0, 0, 0, 0, 0, 0, ND_FLAG_I67|ND_FLAG_MODRM|ND_FLAG_O64, ND_CFF_SNP, 0, 0|NDR_RFLAG_OF|NDR_RFLAG_ZF|NDR_RFLAG_AF|NDR_RFLAG_PF|NDR_RFLAG_SF, 0, 0, { OP(ND_OPT_GPR_rAX, ND_OPS_q, ND_OPF_DEFAULT, ND_OPA_RW, 0, 0), - OP(ND_OPT_GPR_rCX, ND_OPS_q, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), + OP(ND_OPT_MEM_rCX, ND_OPS_dq, ND_OPF_DEFAULT, ND_OPA_R, 0, 0), OP(ND_OPT_F, ND_OPS_v, ND_OPF_DEFAULT, ND_OPA_W, 0, 0), }, }, @@ -21694,7 +21695,7 @@ const ND_INSTRUCTION gInstructions[2701] = ND_INS_SYSCALL, ND_CAT_SYSCALL, ND_SET_AMD, 783, 0, ND_MOD_R0|ND_MOD_R1|ND_MOD_R2|ND_MOD_R3|ND_MOD_REAL|ND_MOD_V8086|ND_MOD_PROT|ND_MOD_COMPAT|ND_MOD_LONG|ND_MOD_VMXR|ND_MOD_VMXN|ND_MOD_VMXR_SEAM|ND_MOD_VMXN_SEAM|ND_MOD_VMX_OFF|ND_MOD_SMM|ND_MOD_SMM_OFF|ND_MOD_SGX_OFF|ND_MOD_TSX|ND_MOD_TSX_OFF, - 0, ND_OPS_CNT(0, 10), 0, 0, 0, 0, 0, 0, ND_FLAG_F64, ND_CFF_FSC, + 0, ND_OPS_CNT(0, 10), 0, 0, 0, 0, 0, 0, ND_FLAG_F64|ND_FLAG_CETT, ND_CFF_FSC, 0, 0, 0, @@ -21718,7 +21719,7 @@ const ND_INSTRUCTION gInstructions[2701] = ND_INS_SYSENTER, ND_CAT_SYSCALL, ND_SET_PPRO, 784, 0, ND_MOD_R0|ND_MOD_R1|ND_MOD_R2|ND_MOD_R3|ND_MOD_PROT|ND_MOD_COMPAT|ND_MOD_LONG|ND_MOD_VMXR|ND_MOD_VMXN|ND_MOD_VMXR_SEAM|ND_MOD_VMXN_SEAM|ND_MOD_VMX_OFF|ND_MOD_SMM|ND_MOD_SMM_OFF|ND_MOD_SGX_OFF|ND_MOD_TSX|ND_MOD_TSX_OFF, - 0, ND_OPS_CNT(0, 9), 0, 0, 0, 0, 0, 0, 0, ND_CFF_SEP, + 0, ND_OPS_CNT(0, 9), 0, 0, 0, 0, 0, 0, ND_FLAG_CETT, ND_CFF_SEP, 0, 0, 0, diff --git a/bddisasm/include/tabledefs.h b/bddisasm/include/tabledefs.h index b769fd8..36e166d 100644 --- a/bddisasm/include/tabledefs.h +++ b/bddisasm/include/tabledefs.h @@ -441,6 +441,8 @@ typedef enum _ND_OPERAND_TYPE_SPEC ND_OPT_SSE_XMM7, // Implicit memory operands. + ND_OPT_MEM_rAX, + ND_OPT_MEM_rCX, ND_OPT_MEM_rBX_AL, ND_OPT_MEM_rDI, ND_OPT_MEM_SHS, diff --git a/bddisasm_test/basic/basic2_64.result b/bddisasm_test/basic/basic2_64.result index c569ff1..bf46b0b 100644 --- a/bddisasm_test/basic/basic2_64.result +++ b/bddisasm_test/basic/basic2_64.result @@ -66,7 +66,8 @@ REP: no, REPcc: no, LOCK: no HLE: no, XACQUIRE only: no, XRELEASE only: no BND: no, BHINT: no, DNT: no - Operand: 0, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 0, Acc: R-, Type: Memory, Size: 1, RawSize: 1, Encoding: S, + Segment: 3, Base: 0, Operand: 1, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: General Purpose, RegSize: 4, RegId: 1, RegCount: 1 Operand: 2, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: General Purpose, RegSize: 4, RegId: 2, RegCount: 1 diff --git a/bddisasm_test/basic/branch_16.result b/bddisasm_test/basic/branch_16.result index 14bbd63..8eaac93 100644 --- a/bddisasm_test/basic/branch_16.result +++ b/bddisasm_test/basic/branch_16.result @@ -580,7 +580,7 @@ 0000000000000066 cd21 INT 0x21 DSIZE: 16, ASIZE: 16, VLEN: - - ISA Set: I86, Ins cat: INTERRUPT, CET tracked: no + ISA Set: I86, Ins cat: INTERRUPT, CET tracked: yes FLAGS access TF: m, IF: m, NT: m, RF: m, VM: tm, AC: m, Valid modes @@ -603,7 +603,7 @@ 0000000000000068 cc INT3 DSIZE: 16, ASIZE: 16, VLEN: - - ISA Set: I86, Ins cat: INTERRUPT, CET tracked: no + ISA Set: I86, Ins cat: INTERRUPT, CET tracked: yes FLAGS access TF: m, IF: m, NT: m, RF: m, VM: tm, AC: m, Valid modes diff --git a/bddisasm_test/basic/branch_32.result b/bddisasm_test/basic/branch_32.result index 34262ca..a9b68d0 100644 --- a/bddisasm_test/basic/branch_32.result +++ b/bddisasm_test/basic/branch_32.result @@ -580,7 +580,7 @@ 0000000000000064 cd21 INT 0x21 DSIZE: 32, ASIZE: 32, VLEN: - - ISA Set: I86, Ins cat: INTERRUPT, CET tracked: no + ISA Set: I86, Ins cat: INTERRUPT, CET tracked: yes FLAGS access TF: m, IF: m, NT: m, RF: m, VM: tm, AC: m, Valid modes @@ -603,7 +603,7 @@ 0000000000000066 cc INT3 DSIZE: 32, ASIZE: 32, VLEN: - - ISA Set: I86, Ins cat: INTERRUPT, CET tracked: no + ISA Set: I86, Ins cat: INTERRUPT, CET tracked: yes FLAGS access TF: m, IF: m, NT: m, RF: m, VM: tm, AC: m, Valid modes @@ -786,7 +786,7 @@ 0000000000000074 0f34 SYSENTER DSIZE: 32, ASIZE: 32, VLEN: - - ISA Set: PPRO, Ins cat: SYSCALL, CET tracked: no + ISA Set: PPRO, Ins cat: SYSCALL, CET tracked: yes CPUID leaf: 0x00000001, reg: edx, bit: 11 FLAGS access IF: 0, diff --git a/bddisasm_test/basic/branch_64.result b/bddisasm_test/basic/branch_64.result index 26c896d..d7ef879 100644 --- a/bddisasm_test/basic/branch_64.result +++ b/bddisasm_test/basic/branch_64.result @@ -360,7 +360,7 @@ 0000000000000032 cd21 INT 0x21 DSIZE: 32, ASIZE: 64, VLEN: - - ISA Set: I86, Ins cat: INTERRUPT, CET tracked: no + ISA Set: I86, Ins cat: INTERRUPT, CET tracked: yes FLAGS access TF: m, IF: m, NT: m, RF: m, VM: tm, AC: m, Valid modes @@ -383,7 +383,7 @@ 0000000000000034 cc INT3 DSIZE: 32, ASIZE: 64, VLEN: - - ISA Set: I86, Ins cat: INTERRUPT, CET tracked: no + ISA Set: I86, Ins cat: INTERRUPT, CET tracked: yes FLAGS access TF: m, IF: m, NT: m, RF: m, VM: tm, AC: m, Valid modes @@ -566,7 +566,7 @@ 0000000000000042 0f05 SYSCALL DSIZE: 64, ASIZE: 64, VLEN: - - ISA Set: AMD, Ins cat: SYSCALL, CET tracked: no + ISA Set: AMD, Ins cat: SYSCALL, CET tracked: yes CPUID leaf: 0x80000001, reg: ecx, bit: 11 FLAGS access Entire register diff --git a/bddisasm_test/basic/snp_64.result b/bddisasm_test/basic/snp_64.result index 89b20a5..49e5461 100644 --- a/bddisasm_test/basic/snp_64.result +++ b/bddisasm_test/basic/snp_64.result @@ -13,10 +13,12 @@ REP: no, REPcc: no, LOCK: no HLE: no, XACQUIRE only: no, XRELEASE only: no BND: no, BHINT: no, DNT: no - Operand: 0, Acc: RW, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 - Operand: 1, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: General Purpose, RegSize: 8, RegId: 1, RegCount: 1 - Operand: 2, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: General Purpose, RegSize: 8, RegId: 2, RegCount: 1 - Operand: 3, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: Flags, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 0, Acc: R-, Type: Memory, Size: 1, RawSize: 1, Encoding: S, + Segment: 3, Base: 0, + Operand: 1, Acc: RW, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: General Purpose, RegSize: 8, RegId: 1, RegCount: 1 + Operand: 3, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: General Purpose, RegSize: 8, RegId: 2, RegCount: 1 + Operand: 4, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: Flags, RegSize: 4, RegId: 0, RegCount: 1 0000000000000004 f20f01fe RMPUPDATE DSIZE: 32, ASIZE: 64, VLEN: - @@ -34,7 +36,8 @@ HLE: no, XACQUIRE only: no, XRELEASE only: no BND: no, BHINT: no, DNT: no Operand: 0, Acc: RW, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 - Operand: 1, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: General Purpose, RegSize: 8, RegId: 1, RegCount: 1 + Operand: 1, Acc: R-, Type: Memory, Size: 16, RawSize: 16, Encoding: S, + Segment: 3, Base: 1, Operand: 2, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: Flags, RegSize: 4, RegId: 0, RegCount: 1 0000000000000008 f30f01ff PSMASH diff --git a/bddisasm_test/cet/dnt_32 b/bddisasm_test/cet/dnt_32 new file mode 100644 index 0000000..0d70c49 --- /dev/null +++ b/bddisasm_test/cet/dnt_32 @@ -0,0 +1 @@ +ÿÿÐdÿdÿÐ>ÿ>ÿÐ>.ÿ>.ÿÐ.>ÿ.>ÿÐ>dÿ>dÿÐd>ÿd>ÿÐ \ No newline at end of file diff --git a/bddisasm_test/cet/dnt_32.asm b/bddisasm_test/cet/dnt_32.asm new file mode 100644 index 0000000..1a29589 --- /dev/null +++ b/bddisasm_test/cet/dnt_32.asm @@ -0,0 +1,28 @@ + bits 32 + + call dword [eax] + call eax + db 0x64 + call dword [eax] + db 0x64 + call eax + db 0x3E + call dword [eax] + db 0x3E + call eax + db 0x3E, 0x2E + call dword [eax] + db 0x3E, 0x2E + call eax + db 0x2E, 0x3E + call dword [eax] + db 0x2E, 0x3E + call eax + db 0x3E, 0x64 + call dword [eax] + db 0x3E, 0x64 + call eax + db 0x64, 0x3E + call dword [eax] + db 0x64, 0x3E + call eax \ No newline at end of file diff --git a/bddisasm_test/cet/dnt_32.result b/bddisasm_test/cet/dnt_32.result new file mode 100644 index 0000000..94b2636 --- /dev/null +++ b/bddisasm_test/cet/dnt_32.result @@ -0,0 +1,273 @@ +0000000000000000 ff10 CALL dword ptr [eax] + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 4, RawSize: 4, Encoding: M, + Segment: 3, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000002 ffd0 CALL eax + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: M, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000004 64ff10 CALL dword ptr fs:[eax] + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 4, RawSize: 4, Encoding: M, + Segment: 4, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000007 64ffd0 CALL eax + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: M, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +000000000000000A 3eff10 DNT CALL dword ptr ds:[eax] + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 4, RawSize: 4, Encoding: M, + Segment: 3, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +000000000000000D 3effd0 DNT CALL eax + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: M, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000010 3e2eff10 CALL dword ptr cs:[eax] + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 4, RawSize: 4, Encoding: M, + Segment: 1, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000014 3e2effd0 CALL eax + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: M, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000018 2e3eff10 DNT CALL dword ptr ds:[eax] + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 4, RawSize: 4, Encoding: M, + Segment: 3, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +000000000000001C 2e3effd0 DNT CALL eax + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: M, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000020 3e64ff10 CALL dword ptr fs:[eax] + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 4, RawSize: 4, Encoding: M, + Segment: 4, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000024 3e64ffd0 CALL eax + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: M, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +0000000000000028 643eff10 DNT CALL dword ptr ds:[eax] + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 4, RawSize: 4, Encoding: M, + Segment: 3, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + +000000000000002C 643effd0 DNT CALL eax + DSIZE: 32, ASIZE: 32, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 4, RawSize: 4, Encoding: M, RegType: General Purpose, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 4, RawSize: 4, Encoding: S, RegType: IP, RegSize: 4, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 4, RawSize: 4, Encoding: S, Shadow stack: 3, + + diff --git a/bddisasm_test/cet/dnt_64 b/bddisasm_test/cet/dnt_64 new file mode 100644 index 0000000..0d70c49 --- /dev/null +++ b/bddisasm_test/cet/dnt_64 @@ -0,0 +1 @@ +ÿÿÐdÿdÿÐ>ÿ>ÿÐ>.ÿ>.ÿÐ.>ÿ.>ÿÐ>dÿ>dÿÐd>ÿd>ÿÐ \ No newline at end of file diff --git a/bddisasm_test/cet/dnt_64.asm b/bddisasm_test/cet/dnt_64.asm new file mode 100644 index 0000000..4184f96 --- /dev/null +++ b/bddisasm_test/cet/dnt_64.asm @@ -0,0 +1,28 @@ + bits 64 + + call qword [rax] + call rax + db 0x64 + call qword [rax] + db 0x64 + call rax + db 0x3E + call qword [rax] + db 0x3E + call rax + db 0x3E, 0x2E + call qword [rax] + db 0x3E, 0x2E + call rax + db 0x2E, 0x3E + call qword [rax] + db 0x2E, 0x3E + call rax + db 0x3E, 0x64 + call qword [rax] + db 0x3E, 0x64 + call rax + db 0x64, 0x3E + call qword [rax] + db 0x64, 0x3E + call rax \ No newline at end of file diff --git a/bddisasm_test/cet/dnt_64.result b/bddisasm_test/cet/dnt_64.result new file mode 100644 index 0000000..29cb513 --- /dev/null +++ b/bddisasm_test/cet/dnt_64.result @@ -0,0 +1,273 @@ +0000000000000000 ff10 CALL qword ptr [rax] + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 8, RawSize: 8, Encoding: M, + Segment: 3, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000002 ffd0 CALL rax + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: M, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000004 64ff10 CALL qword ptr fs:[rax] + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 8, RawSize: 8, Encoding: M, + Segment: 4, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000007 64ffd0 CALL rax + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: M, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +000000000000000A 3eff10 DNT CALL qword ptr [rax] + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 8, RawSize: 8, Encoding: M, + Segment: 3, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +000000000000000D 3effd0 DNT CALL rax + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: M, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000010 3e2eff10 DNT CALL qword ptr [rax] + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 8, RawSize: 8, Encoding: M, + Segment: 3, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000014 3e2effd0 DNT CALL rax + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: M, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000018 2e3eff10 DNT CALL qword ptr [rax] + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 8, RawSize: 8, Encoding: M, + Segment: 3, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +000000000000001C 2e3effd0 DNT CALL rax + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: no + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: M, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000020 3e64ff10 CALL qword ptr fs:[rax] + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 8, RawSize: 8, Encoding: M, + Segment: 4, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000024 3e64ffd0 CALL rax + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: M, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +0000000000000028 643eff10 CALL qword ptr fs:[rax] + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Memory, Size: 8, RawSize: 8, Encoding: M, + Segment: 4, Base: 0, + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + +000000000000002C 643effd0 CALL rax + DSIZE: 64, ASIZE: 64, VLEN: - + ISA Set: I86, Ins cat: CALL, CET tracked: yes + Valid modes + R0: yes, R1: yes, R2: yes, R3: yes + Real: yes, V8086: yes, Prot: yes, Compat: yes, Long: yes + SMM on: yes, SMM off: yes, SGX on: yes, SGX off: yes, TSX on: yes, TSX off: yes + VMXRoot: yes, VMXNonRoot: yes, VMXRoot SEAM: yes, VMXNonRoot SEAM: yes, VMX off: yes + Valid prefixes + REP: no, REPcc: no, LOCK: no + HLE: no, XACQUIRE only: no, XRELEASE only: no + BND: yes, BHINT: no, DNT: yes + Operand: 0, Acc: R-, Type: Register, Size: 8, RawSize: 8, Encoding: M, RegType: General Purpose, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 1, Acc: -W, Type: Register, Size: 8, RawSize: 8, Encoding: S, RegType: IP, RegSize: 8, RegId: 0, RegCount: 1 + Operand: 2, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Stack: yes, + Segment: 2, Base: 4, + Operand: 3, Acc: -W, Type: Memory, Size: 8, RawSize: 8, Encoding: S, Shadow stack: 3, + + diff --git a/bddisasm_test/special/invalid_32_skip.result b/bddisasm_test/special/invalid_32_skip.result index 9384f13..59cfc55 100644 --- a/bddisasm_test/special/invalid_32_skip.result +++ b/bddisasm_test/special/invalid_32_skip.result @@ -1,7 +1,7 @@ 0000000000000000 0f db 0x0f (0x80000009) 0000000000000010 0f05 SYSCALL DSIZE: 32, ASIZE: 32, VLEN: - - ISA Set: AMD, Ins cat: SYSCALL, CET tracked: no + ISA Set: AMD, Ins cat: SYSCALL, CET tracked: yes CPUID leaf: 0x80000001, reg: ecx, bit: 11 FLAGS access Entire register diff --git a/bddisasm_test/special/only_64.result b/bddisasm_test/special/only_64.result index 0a88d47..0f60743 100644 --- a/bddisasm_test/special/only_64.result +++ b/bddisasm_test/special/only_64.result @@ -60,7 +60,7 @@ 000000000000000B 0f05 SYSCALL DSIZE: 64, ASIZE: 64, VLEN: - - ISA Set: AMD, Ins cat: SYSCALL, CET tracked: no + ISA Set: AMD, Ins cat: SYSCALL, CET tracked: yes CPUID leaf: 0x80000001, reg: ecx, bit: 11 FLAGS access Entire register diff --git a/bddisasm_test/special/regressions_32.result b/bddisasm_test/special/regressions_32.result index cd185d5..0e51ca5 100644 --- a/bddisasm_test/special/regressions_32.result +++ b/bddisasm_test/special/regressions_32.result @@ -82,7 +82,7 @@ 000000000000000A 260f05 SYSCALL DSIZE: 32, ASIZE: 32, VLEN: - - ISA Set: AMD, Ins cat: SYSCALL, CET tracked: no + ISA Set: AMD, Ins cat: SYSCALL, CET tracked: yes CPUID leaf: 0x80000001, reg: ecx, bit: 11 FLAGS access Entire register diff --git a/bdshemu_test/bdshemu_test.zip b/bdshemu_test/bdshemu_test.zip index 300fbc5545a71f657eaa6bd4917384551e069720..5ed1f788ad213275f9f0534e0cdec72c2776f8ea 100644 GIT binary patch literal 80935 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 U3 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 diff --git a/inc/bdshemu.h b/inc/bdshemu.h index 7a57047..5e9cd15 100644 --- a/inc/bdshemu.h +++ b/inc/bdshemu.h @@ -260,6 +260,7 @@ typedef unsigned int SHEMU_STATUS; #define SHEMU_FLAG_SWAPGS 0x00020000 // SWAPGS was executed. #define SHEMU_FLAG_SYSCALL_MSR_READ 0x00040000 // A SYSCALL/SYSENTER MSR read. #define SHEMU_FLAG_SYSCALL_MSR_WRITE 0x00080000 // A SYSCALL/SYSENTER MSR write. +#define SHEMU_FLAG_SIDT 0x00100000 // SIDT was executed. // diff --git a/inc/version.h b/inc/version.h index 9da0e7c..37f5a59 100644 --- a/inc/version.h +++ b/inc/version.h @@ -7,6 +7,6 @@ #define DISASM_VERSION_MAJOR 1 #define DISASM_VERSION_MINOR 34 -#define DISASM_VERSION_REVISION 2 +#define DISASM_VERSION_REVISION 4 #endif // DISASM_VER_H diff --git a/isagenerator/disasmlib.py b/isagenerator/disasmlib.py index a406d74..8ffe4d5 100644 --- a/isagenerator/disasmlib.py +++ b/isagenerator/disasmlib.py @@ -294,6 +294,8 @@ valid_impops = {# register size 'SSP' : ('SSP', 'yf'), # Shadow stack pointer. 32 bit in protected/compat mode, 64 in long mode. # Implicit memory operands. + 'pAXb' : ('pAX', 'b'), # Implicit byte [rAX], used by MONITOR and MONITORX. Can be overriden. + 'pCXdq' : ('pCX', 'dq'), # Implicit xmmword [rCX], used by RMPADJUST. Can be overriden. 'pBXALb' : ('pBXAL', 'b'), # Implicit [RBX + AL], as used by XLAT. 'pDIq' : ('pDI', 'q'), # Implicit qword [RDI]. 'pDIdq' : ('pDI', 'dq'), # Implicit xmmword [RDI]. diff --git a/isagenerator/generate_tables.py b/isagenerator/generate_tables.py index c841d22..fa0fff1 100644 --- a/isagenerator/generate_tables.py +++ b/isagenerator/generate_tables.py @@ -146,6 +146,8 @@ optype = { 'XMM7' : 'ND_OPT_SSE_XMM7', # Memory operands + 'pAX' : 'ND_OPT_MEM_rAX', + 'pCX' : 'ND_OPT_MEM_rCX', 'pBXAL' : 'ND_OPT_MEM_rBX_AL', 'pDI' : 'ND_OPT_MEM_rDI', 'SHS' : 'ND_OPT_MEM_SHS', diff --git a/isagenerator/instructions/table_0F.dat b/isagenerator/instructions/table_0F.dat index 6b1c326..93cd187 100644 --- a/isagenerator/instructions/table_0F.dat +++ b/isagenerator/instructions/table_0F.dat @@ -27,7 +27,7 @@ VMLAUNCH nil Fv [ NP 0x0F 0x01 /0 VMRESUME nil Fv [ NP 0x0F 0x01 /0xC3] s:VTX, t:VTX, w:W, f:VMX, m:VMXROOT VMXOFF nil Fv [ NP 0x0F 0x01 /0xC4] s:VTX, t:VTX, w:W, f:VMX, m:VMXROOT PCONFIG nil EAX,RBX,RCX,RDX [ NP 0x0F 0x01 /0xC5] s:PCONFIG, t:PCONFIG, w:R|RW|RW|RW, m:NOV86 -MONITOR nil EAX,ECX,EDX [ NP 0x0F 0x01 /0xC8] s:SSE3, t:MISC, w:R|R|R, i:MONITOR, m:KERNEL|NOV86 +MONITOR nil pAXb,ECX,EDX [ NP 0x0F 0x01 /0xC8] s:SSE3, t:MISC, w:R|R|R, i:MONITOR, m:KERNEL|NOV86 MWAIT nil EAX,ECX [ NP 0x0F 0x01 /0xC9] s:SSE3, t:MISC, w:RW|R, i:MONITOR, m:KERNEL|NOV86 CLAC nil Fv [ NP 0x0F 0x01 /0xCA] s:SMAP, t:SMAP, w:W, f:AC=0, m:KERNEL|NOV86 ERETU nil rIP,Fv,rSP,CS,SS,Kv5,SSP,GSBASE,KGSBASE [0xF3 0x0F 0x01 /0xCA] s:FRED, t:FRED, w:W|W|W|W|W|R|CRCW|RW|RW, m:KERNEL|O64|NOTSX, a:F64 @@ -68,14 +68,14 @@ WRPKRU nil EDX,EAX,ECX,PKRU [ NP 0x0F 0x01 /0 STUI nil UIF [ 0xF3 0x0F 0x01 /0xEF] s:UINTR, t:UINTR, w:W, m:O64|NOTSX|NOSGX SWAPGS nil GSBASE,KGSBASE [ 0x0F 0x01 /0xF8] s:LONGMODE, t:SYSTEM, w:RW|RW, m:KERNEL|O64 RDTSCP nil EAX,EDX,ECX,TSC,TSCAUX [ 0x0F 0x01 /0xF9] s:RDTSCP, t:SYSTEM, w:W|W|W|R|R -MONITORX nil EAX,ECX,EDX [ NP 0x0F 0x01 /0xFA] s:MWAITT, t:SYSTEM, w:R|R|R, m:KERNEL|NOV86 +MONITORX nil pAXb,ECX,EDX [ NP 0x0F 0x01 /0xFA] s:MWAITT, t:SYSTEM, w:R|R|R, m:KERNEL|NOV86 MCOMMIT nil Fv [ 0xF3 0x0F 0x01 /0xFA] s:MCOMMIT, t:MISC, w:W, f:CF=m|PF=0|AF=0|ZF=0|SF=0|OF=0 MWAITX nil EAX,ECX,EBX [ NP 0x0F 0x01 /0xFB] s:MWAITT, t:SYSTEM, w:R|R|R, m:KERNEL|NOV86 CLZERO nil rAX [ 0x0F 0x01 /0xFC] s:CLZERO, t:MISC, w:R RDPRU nil EAX,EDX,ECX,Fv [ 0x0F 0x01 /0xFD] s:RDPRU, t:MISC, w:W|W|R|W, f:CF=m|PF=0|AF=0|ZF=0|SF=0|OF=0 INVLPGB nil rAX,ECX,EDX [ 0x0F 0x01 /0xFE] s:INVLPGB, t:SYSTEM, w:R|R|R, m:NOREAL|KERNEL -RMPADJUST nil RAX,RCX,RDX,Fv [ 0xF3 0x0F 0x01 /0xFE] s:SNP, t:SYSTEM, w:RW|R|R|W, f:OF=m|ZF=m|AF=m|PF=m|SF=m, m:O64|KERNEL -RMPUPDATE nil RAX,RCX,Fv [ 0xF2 0x0F 0x01 /0xFE] s:SNP, t:SYSTEM, w:RW|R|W, f:OF=m|ZF=m|AF=m|PF=m|SF=m, m:O64|KERNEL +RMPADJUST nil pAXb,EAX,RCX,RDX,Fv [ 0xF3 0x0F 0x01 /0xFE] s:SNP, t:SYSTEM, w:R|RW|R|R|W, f:OF=m|ZF=m|AF=m|PF=m|SF=m, a:I67, m:O64|KERNEL +RMPUPDATE nil RAX,pCXdq,Fv [ 0xF2 0x0F 0x01 /0xFE] s:SNP, t:SYSTEM, w:RW|R|W, f:OF=m|ZF=m|AF=m|PF=m|SF=m, a:I67, m:O64|KERNEL TLBSYNC nil nil [ 0x0F 0x01 /0xFF] s:INVLPGB, t:SYSTEM, m:NOREAL|KERNEL PSMASH nil RAX,Fv [ 0xF3 0x0F 0x01 /0xFF] s:SNP, t:SYSTEM, w:RW|W, f:OF=m|ZF=m|AF=m|PF=m|SF=m, m:O64|KERNEL PVALIDATE nil rAX,ECX,EDX,Fv [ 0xF2 0x0F 0x01 /0xFF] s:SNP, t:SYSTEM, w:RW|R|R|W, f:OF=m|ZF=m|AF=m|PF=m|SF=m|CF=m, m:KERNEL @@ -84,7 +84,7 @@ LAR Gv,Rz Fv [ 0x0F 0x02 /r LSL Gv,Mw Fv [ 0x0F 0x03 /r:mem] s:I286PROT, t:SYSTEM, w:RW|R|W, f:ZF=m, m:NOREAL LSL Gv,Rz Fv [ 0x0F 0x03 /r:reg] s:I286PROT, t:SYSTEM, w:RW|R|W, f:ZF=m, m:NOREAL #LOADALL nil BANK [ 0x0F 0x05] s:I486REAL, t:UNDOC, w:R -SYSCALL nil STAR,LSTAR,FMASK,SS,RCX,R11,CS,rIP,Fv,SSP [ 0x0F 0x05] s:AMD, t:SYSCALL, w:R|R|R|W|W|W|W|W|RW|RW, a:F64, i:FSC, m:NOSGX +SYSCALL nil STAR,LSTAR,FMASK,SS,RCX,R11,CS,rIP,Fv,SSP [ 0x0F 0x05] s:AMD, t:SYSCALL, w:R|R|R|W|W|W|W|W|RW|RW, a:F64|CETT, i:FSC, m:NOSGX CLTS nil CR0 [ 0x0F 0x06] s:I286REAL, t:SYSTEM, w:W, m:KERNEL|NOV86 #LOADALLD nil BANK [ 0x0F 0x07] s:I486REAL, t:UNDOC, w:R SYSRET nil STAR,SS,rCX,R11,CS,rIP,Fv,SSP [ 0x0F 0x07] s:AMD, t:SYSRET, w:R|W|R|R|W|W|W|W, i:FSC, m:KERNEL @@ -254,7 +254,7 @@ WRMSR nil EAX,EDX,ECX,MSR [ 0x0F 0x30] RDTSC nil EAX,EDX,TSC [ 0x0F 0x31] s:PENTIUMREAL, t:SYSTEM, w:W|W|R RDMSR nil EAX,EDX,ECX,MSR [ 0x0F 0x32] s:PENTIUMREAL, t:SYSTEM, w:W|W|R|R, m:KERNEL|NOV86, i:MSR RDPMC nil EAX,EDX,ECX,MSR [ 0x0F 0x33] s:RDPMC, t:SYSTEM, w:W|W|R|R, m:NOSGX -SYSENTER nil SCS,SESP,SEIP,SS,sSP,CS,rIP,Fv,SSP [ 0x0F 0x34] s:PPRO, t:SYSCALL, w:R|R|R|W|W|W|W|W|RW, i:SEP, f:IF=0, m:NOREAL|NOSGX +SYSENTER nil SCS,SESP,SEIP,SS,sSP,CS,rIP,Fv,SSP [ 0x0F 0x34] s:PPRO, t:SYSCALL, w:R|R|R|W|W|W|W|W|RW, a:CETT, i:SEP, f:IF=0, m:NOREAL|NOSGX SYSEXIT nil SS,sSP,CS,rIP,SSP [ 0x0F 0x35] s:PPRO, t:SYSRET, w:W|W|W|W|W|W, a:F64, i:SEP, m:KERNEL|NOREAL RDSHR Ed nil [ cyrix 0x0F 0x36 /r] s:CYRIX, t:SYSTEM, w:R GETSEC nil EAX,EBX [ NP 0x0F 0x37] s:SMX, t:SYSTEM, w:RCW|R, m:KERNEL|NOREAL|NOSGX diff --git a/isagenerator/instructions/table_base.dat b/isagenerator/instructions/table_base.dat index 076e599..20faaa7 100644 --- a/isagenerator/instructions/table_base.dat +++ b/isagenerator/instructions/table_base.dat @@ -338,9 +338,9 @@ ENTER Iw,Ib rBP,sSP,Kv [ 0xC8 iw ib] s:I18 LEAVE nil sBP,rBP,rSP,Kv [ 0xC9] s:I186, t:MISC, w:R|RW|RW|R, a:D64 RETF Iw CS,rIP,Kv2,SHS2 [ 0xCA iw] s:I86, t:RET, w:R|W|W|R|R RETF nil CS,rIP,Kv2,SHS2 [ 0xCB] s:I86, t:RET, w:W|W|R|R -INT3 nil CS,rIP,Kv3,Fv,SHS3 [ 0xCC] s:I86, t:INTERRUPT, w:RW|RW|RW|W|W, f:INT, m:NOSGX -INT Ib CS,rIP,Kv3,Fv,SHS3 [ 0xCD ib] s:I86, t:INTERRUPT, w:R|RW|RW|RW|W|W, f:INT, m:NOSGX -INTO nil CS,rIP,Kv3,Fv,SHS3 [ 0xCE] s:I86, t:INTERRUPT, w:RW|RW|RW|W|W, f:INT, m:NO64|NOSGX +INT3 nil CS,rIP,Kv3,Fv,SHS3 [ 0xCC] s:I86, t:INTERRUPT, w:RW|RW|RW|W|W, a:CETT, f:INT, m:NOSGX +INT Ib CS,rIP,Kv3,Fv,SHS3 [ 0xCD ib] s:I86, t:INTERRUPT, w:R|RW|RW|RW|W|W, a:CETT, f:INT, m:NOSGX +INTO nil CS,rIP,Kv3,Fv,SHS3 [ 0xCE] s:I86, t:INTERRUPT, w:RW|RW|RW|W|W, a:CETT, f:INT, m:NO64|NOSGX IRETW nil CS,rIP,Kv3,Fv,SHS3 [ ds16 0xCF] s:I86, t:RET, c:IRET, w:RW|W|R|RW|RW, a:SERIAL IRETD nil CS,rIP,Kv3,Fv,SHS3 [ ds32 0xCF] s:I86, t:RET, c:IRET, w:RW|W|R|RW|RW, a:SERIAL IRETQ nil CS,rIP,Kv3,Fv,SHS3 [ ds64 0xCF] s:I86, t:RET, c:IRET, w:RW|W|R|RW|RW, a:SERIAL diff --git a/pybddisasm/setup.py b/pybddisasm/setup.py index 969ffc5..5587e63 100644 --- a/pybddisasm/setup.py +++ b/pybddisasm/setup.py @@ -12,7 +12,7 @@ from setuptools import find_packages, setup, Command, Extension, Distribution from codecs import open VERSION = (0, 1, 3) -LIBRARY_VERSION = (1, 34, 2) +LIBRARY_VERSION = (1, 34, 4) LIBRARY_INSTRUX_SIZE = 864 packages = ['pybddisasm']