diff options
author | Michael Smith <mikesmiffy128@gmail.com> | 2023-07-29 13:24:03 +0100 |
---|---|---|
committer | Michael Smith <mikesmiffy128@gmail.com> | 2023-08-02 01:08:29 +0100 |
commit | 472b37fbf06e3588ff8ec9496aef44758ebf1bc3 (patch) | |
tree | 39dc5411507cb967de6a6ee4b99d60e5670a1826 /test | |
parent | 1e310fa30a1bca4448f47116f5d05037cc2ada1a (diff) |
Fix another x86 case and add regression tests
Diffstat (limited to 'test')
-rw-r--r-- | test/x86.test.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/x86.test.c b/test/x86.test.c new file mode 100644 index 0000000..ab0a679 --- /dev/null +++ b/test/x86.test.c @@ -0,0 +1,41 @@ +/* This file is dedicated to the public domain. */ + +{.desc = "x86 opcode parsing"}; + +#include "../src/x86.c" +#include "../src/intdefs.h" + +TEST("The \"crazy\" instructions should be given correct lengths\n") { + const uchar test8[] = { + 0xF6, 0x05, 0x12, 0x34, 0x56, 0x78, 0x12 + }; + const uchar test16[] = { + 0x66, 0xF7, 0x05, 0x12, 0x34, 0x56, 0x78, 0x12, 0x34 + }; + const uchar test32[] = { + 0xF7, 0x05, 0x12, 0x34, 0x56, 0x78, 0x12, 0x34, 0x56, 0x78 + }; + const uchar not8[] = { + 0xF6, 0x15, 0x12, 0x34, 0x56, 0x78 + }; + const uchar not16[] = { + 0x66, 0xF7, 0x15, 0x12, 0x34, 0x56, 0x78 + }; + const uchar not32[] = { + 0xF7, 0x15, 0x12, 0x34, 0x56, 0x78 + }; + if (x86_len(test8) != 7) return false; + if (x86_len(test16) != 9) return false; + if (x86_len(test32) != 10) return false; + if (x86_len(not8) != 6) return false; + if (x86_len(not16) != 7) return false; + if (x86_len(not32) != 6) return false; + return true; +} + +TEST("SIB bytes should be decoded correctly") { + const uchar fstp[] = {0xD9, 0x1C, 0x24}; // old buggy case, for regressions + return x86_len(fstp) == 3; +} + +// vi: sw=4 ts=4 noet tw=80 cc=80 |