tests: Add few more encode/decode cases

This commit is contained in:
Alexis Engelke
2021-04-02 11:27:41 +02:00
parent 4185d7b2d6
commit c99e860a5e
3 changed files with 39 additions and 2 deletions

View File

@@ -1363,8 +1363,8 @@ db/0m M MEM32 - - - FILD ENC_SEPSZ
db/1m M MEM32 - - - FISTTP ENC_SEPSZ
db/2m M MEM32 - - - FIST ENC_SEPSZ
db/3m M MEM32 - - - FISTP ENC_SEPSZ
db/5m M FPU - - - FLD
db/7m M FPU - - - FSTP
db/5m M FPU - - - FLD ENC_SEPSZ
db/7m M FPU - - - FSTP ENC_SEPSZ
db/0r M FPU - - - FCMOVNB
db/1r M FPU - - - FCMOVNE
db/2r M FPU - - - FCMOVNBE

View File

@@ -130,6 +130,7 @@ main(int argc, char** argv)
TEST("\x0F\x01\xE2", "smsw edx");
TEST("\x66\x0F\x01\xE2", "smsw dx");
TEST64("\x66\x48\x0F\x01\xE2", "smsw rdx");
TEST64("\xf2\x66\x0f\x01\x23", "smsw word ptr [rbx]");
TEST32("\x66\x0f\x20\x00", "mov eax, cr0"); // mod=0, 66h
TEST64("\x66\x0f\x20\x00", "mov rax, cr0"); // mod=0, 66h
TEST32("\xf3\x0f\x20\x00", "mov eax, cr0"); // REP
@@ -155,6 +156,7 @@ main(int argc, char** argv)
TEST64("\x41\xd8\xc1", "fadd st(0), st(1)"); // REX.B ignored
TEST64("\xd9\xc9", "fxch st(1)");
TEST64("\xd9\xd0", "fnop");
TEST("\xdf\xe0", "fstsw ax");
TEST64("\x41\xdf\xe0", "fstsw ax");
// ModRM Test cases
@@ -226,6 +228,8 @@ main(int argc, char** argv)
TEST("\x66\x6a\xff", "pushw 0xffff");
TEST32("\x6a\xff", "push 0xffffffff");
TEST64("\x6a\xff", "push 0xffffffffffffffff");
TEST32("\x60", "pushad");
TEST32("\x66\x60", "pushaw");
TEST("\xb0\xf0", "mov al, 0xf0");
TEST("\x66\xb8\xf0\xf0", "mov ax, 0xf0f0");
TEST("\xb8\xf0\xf0\xab\xff", "mov eax, 0xffabf0f0");

View File

@@ -85,6 +85,18 @@ main(int argc, char** argv)
TEST("\xff\x30", FE_PUSHm, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xff\x31", FE_PUSHm, FE_MEM(FE_CX, 0, 0, 0));
TEST("\x9c", FE_PUSHF);
TEST("\x8c\xc0", FE_MOV_S2Grr, FE_AX, FE_ES);
TEST("\x8c\xc8", FE_MOV_S2Grr, FE_AX, FE_CS);
TEST("\x8c\xd0", FE_MOV_S2Grr, FE_AX, FE_SS);
TEST("\x8c\xd8", FE_MOV_S2Grr, FE_AX, FE_DS);
TEST("\x8c\xe0", FE_MOV_S2Grr, FE_AX, FE_FS);
TEST("\x8c\xe8", FE_MOV_S2Grr, FE_AX, FE_GS);
TEST("\x8e\xc0", FE_MOV_G2Srr, FE_ES, FE_AX);
// TEST("", FE_MOV_G2Srr, FE_CS, FE_AX);
TEST("\x8e\xd0", FE_MOV_G2Srr, FE_SS, FE_AX);
TEST("\x8e\xd8", FE_MOV_G2Srr, FE_DS, FE_AX);
TEST("\x8e\xe0", FE_MOV_G2Srr, FE_FS, FE_AX);
TEST("\x8e\xe8", FE_MOV_G2Srr, FE_GS, FE_AX);
TEST("\xd2\xe4", FE_SHL8rr, FE_AH, FE_CX);
TEST("", FE_SHL8rr, FE_AH, FE_DX);
TEST("\xd0\xe0", FE_SHL8ri, FE_AX, 1);
@@ -201,6 +213,27 @@ main(int argc, char** argv)
TEST("", FE_MOV64ar, 0xfedcba9876543210, FE_CX);
TEST("", FE_MOV64ar|FE_ADDR32, 0xfedcba98, FE_CX);
// Test FPU instructions
TEST("\xd8\x00", FE_FADDm32, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xdc\x00", FE_FADDm64, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xd8\xc0", FE_FADDrr, FE_ST0, FE_ST0);
TEST("\xd8\xc1", FE_FADDrr, FE_ST0, FE_ST1);
TEST("\xdc\xc1", FE_FADDrr, FE_ST1, FE_ST0);
TEST("", FE_FADDrr, FE_ST1, FE_ST1);
TEST("\xde\xc1", FE_FADDPrr, FE_ST1, FE_ST0);
TEST("\xda\x00", FE_FIADDm32, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xde\x00", FE_FIADDm16, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xd9\x00", FE_FLDm32, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xdd\x00", FE_FLDm64, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xdb\x28", FE_FLDm80, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xdf\x00", FE_FILDm16, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xdb\x00", FE_FILDm32, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xdf\x28", FE_FILDm64, FE_MEM(FE_AX, 0, 0, 0));
TEST("\xd9\xc1", FE_FLDr, FE_ST1);
TEST("\xd9\xe8", FE_FLD1);
TEST("\xdf\xe0", FE_FSTSWr, FE_AX);
TEST("", FE_FSTSWr, FE_CX);
// Test VEX encoding
TEST("\xc5\xfc\x77", FE_VZEROALL);
TEST("\xc5\xf8\x77", FE_VZEROUPPER);