diff options
| author | Camille Mougey <commial@gmail.com> | 2015-07-30 08:31:34 +0200 |
|---|---|---|
| committer | Camille Mougey <commial@gmail.com> | 2015-07-30 08:31:34 +0200 |
| commit | ea4ca3425e49c59fa4cb9b5b5b91cc9431dcb843 (patch) | |
| tree | dda7deef86d31ed01361eca60719f81ef2db79a5 /test | |
| parent | 817fc666eac74c802d4d592f50a3872a3197f4a5 (diff) | |
| parent | 5802dfd9ff93f755b648ff4a3ba236a80c121fb3 (diff) | |
| download | miasm-ea4ca3425e49c59fa4cb9b5b5b91cc9431dcb843.tar.gz miasm-ea4ca3425e49c59fa4cb9b5b5b91cc9431dcb843.zip | |
Merge pull request #199 from serpilliere/fix_x86_sem
Fix x86 sem
Diffstat (limited to '')
| -rw-r--r-- | test/arch/x86/unit/mn_daa.py | 76 | ||||
| -rw-r--r-- | test/arch/x86/unit/mn_das.py | 106 | ||||
| -rw-r--r-- | test/expression/simplifications.py | 33 | ||||
| -rw-r--r-- | test/test_all.py | 2 |
4 files changed, 217 insertions, 0 deletions
diff --git a/test/arch/x86/unit/mn_daa.py b/test/arch/x86/unit/mn_daa.py new file mode 100644 index 00000000..cb96a22b --- /dev/null +++ b/test/arch/x86/unit/mn_daa.py @@ -0,0 +1,76 @@ +#! /usr/bin/env python +from asm_test import Asm_Test + + +class Test_DAA(Asm_Test): + TXT = ''' + main: + MOV EBP, ESP + LEA ESI, DWORD PTR [array_al] + loop: + + ; load original cf + LODSB + MOV BL, AL + ; load original af + LODSB + SHL AL, 4 + OR AL, BL + MOV AH, AL + SAHF + ; load original al + LODSB + + DAA + MOV BL, AL + + LAHF + MOV CL, AH + + ; test cf + LODSB + MOV DL, CL + AND DL, 1 + CMP DL, AL + JNZ BAD + + MOV DL, CL + SHR DL, 4 + AND DL, 1 + ; test af + LODSB + CMP DL, AL + JNZ BAD + + ; test value + LODSB + CMP AL, BL + JNZ BAD + + CMP ESI, array_al_end + JB loop + + + end: + RET + +BAD: + INT 0x3 + RET + +array_al: +.byte 0, 1, 0x08, 0, 1, 0x0E +.byte 0, 1, 0x09, 0, 1, 0x0F +.byte 0, 1, 0x0A, 0, 1, 0x10 +.byte 0, 1, 0x98, 0, 1, 0x9E +.byte 0, 1, 0x99, 0, 1, 0x9F +.byte 0, 1, 0x9A, 1, 1, 0x00 +array_al_end: +.long 0 + ''' + def check(self): + pass + + +if __name__ == "__main__": + [test()() for test in [Test_DAA]] diff --git a/test/arch/x86/unit/mn_das.py b/test/arch/x86/unit/mn_das.py new file mode 100644 index 00000000..ba84abdd --- /dev/null +++ b/test/arch/x86/unit/mn_das.py @@ -0,0 +1,106 @@ +#! /usr/bin/env python +from asm_test import Asm_Test + + +class Test_DAS(Asm_Test): + TXT = ''' + main: + MOV EBP, ESP + LEA ESI, DWORD PTR [array_al] + loop: + + ; load original cf + LODSB + MOV BL, AL + ; load original af + LODSB + SHL AL, 4 + OR AL, BL + MOV AH, AL + SAHF + ; load original al + LODSB + + DAS + MOV BL, AL + + LAHF + MOV CL, AH + + ; test cf + LODSB + MOV DL, CL + AND DL, 1 + CMP DL, AL + JNZ BAD + + MOV DL, CL + SHR DL, 4 + AND DL, 1 + ; test af + LODSB + CMP DL, AL + JNZ BAD + + ; test value + LODSB + CMP AL, BL + JNZ BAD + + CMP ESI, array_al_end + JB loop + + + end: + RET + +BAD: + INT 0x3 + RET + +array_al: +.byte 0, 0, 0x05, 0, 0, 0x05 +.byte 0, 1, 0x05, 1, 1, 0xFF +.byte 1, 0, 0x05, 1, 0, 0xA5 +.byte 1, 1, 0x05, 1, 1, 0x9F +.byte 0, 0, 0x06, 0, 0, 0x06 +.byte 0, 1, 0x06, 0, 1, 0x00 +.byte 1, 0, 0x06, 1, 0, 0xA6 +.byte 1, 1, 0x06, 1, 1, 0xA0 +.byte 0, 0, 0x07, 0, 0, 0x07 +.byte 0, 1, 0x07, 0, 1, 0x01 +.byte 1, 0, 0x07, 1, 0, 0xA7 +.byte 1, 1, 0x07, 1, 1, 0xA1 +.byte 0, 0, 0x08, 0, 0, 0x08 +.byte 0, 1, 0x08, 0, 1, 0x02 +.byte 1, 0, 0x08, 1, 0, 0xA8 +.byte 1, 1, 0x08, 1, 1, 0xA2 +.byte 0, 0, 0x09, 0, 0, 0x09 +.byte 0, 1, 0x09, 0, 1, 0x03 +.byte 1, 0, 0x09, 1, 0, 0xA9 +.byte 1, 1, 0x09, 1, 1, 0xA3 +.byte 0, 0, 0x0A, 0, 1, 0x04 +.byte 0, 1, 0x0A, 0, 1, 0x04 +.byte 1, 0, 0x0A, 1, 1, 0xA4 +.byte 1, 1, 0x0A, 1, 1, 0xA4 +.byte 0, 0, 0x98, 0, 0, 0x98 +.byte 0, 1, 0x98, 0, 1, 0x92 +.byte 1, 0, 0x98, 1, 0, 0x38 +.byte 1, 1, 0x98, 1, 1, 0x32 +.byte 0, 0, 0x99, 0, 0, 0x99 +.byte 0, 1, 0x99, 0, 1, 0x93 +.byte 1, 0, 0x99, 1, 0, 0x39 +.byte 1, 1, 0x99, 1, 1, 0x33 +.byte 0, 0, 0x9A, 1, 1, 0x34 +.byte 0, 1, 0x9A, 1, 1, 0x34 +.byte 1, 0, 0x9A, 1, 1, 0x34 +.byte 1, 1, 0x9A, 1, 1, 0x34 +array_al_end: +.long 0 + ''' + def check(self): + pass + + +if __name__ == "__main__": + [test()() for test in [Test_DAS]] diff --git a/test/expression/simplifications.py b/test/expression/simplifications.py index 1f5a5c5b..6290a807 100644 --- a/test/expression/simplifications.py +++ b/test/expression/simplifications.py @@ -3,6 +3,7 @@ # from pdb import pm from miasm2.expression.expression import * +from miasm2.expression.expression_helper import expr_cmpu, expr_cmps from miasm2.expression.simplifications import expr_simp, ExpressionSimplifier from miasm2.expression.simplifications_cond import ExprOp_inf_signed, ExprOp_inf_unsigned, ExprOp_equal @@ -264,6 +265,38 @@ to_test = [(ExprInt32(1) - ExprInt32(1), ExprInt32(0)), a[:16]), ((a << ExprInt32(16))[24:32], a[8:16]), + (expr_cmpu(ExprInt32(0), ExprInt32(0)), + ExprInt1(0)), + (expr_cmpu(ExprInt32(10), ExprInt32(0)), + ExprInt1(1)), + (expr_cmpu(ExprInt32(10), ExprInt32(5)), + ExprInt1(1)), + (expr_cmpu(ExprInt32(5), ExprInt32(10)), + ExprInt1(0)), + (expr_cmpu(ExprInt32(-1), ExprInt32(0)), + ExprInt1(1)), + (expr_cmpu(ExprInt32(-1), ExprInt32(-1)), + ExprInt1(0)), + (expr_cmpu(ExprInt32(0), ExprInt32(-1)), + ExprInt1(0)), + (expr_cmps(ExprInt32(0), ExprInt32(0)), + ExprInt1(0)), + (expr_cmps(ExprInt32(10), ExprInt32(0)), + ExprInt1(1)), + (expr_cmps(ExprInt32(10), ExprInt32(5)), + ExprInt1(1)), + (expr_cmps(ExprInt32(5), ExprInt32(10)), + ExprInt1(0)), + (expr_cmps(ExprInt32(-1), ExprInt32(0)), + ExprInt1(0)), + (expr_cmps(ExprInt32(-1), ExprInt32(-1)), + ExprInt1(0)), + (expr_cmps(ExprInt32(0), ExprInt32(-1)), + ExprInt1(1)), + (expr_cmps(ExprInt32(-5), ExprInt32(-10)), + ExprInt1(1)), + (expr_cmps(ExprInt32(-10), ExprInt32(-5)), + ExprInt1(0)), ] diff --git a/test/test_all.py b/test/test_all.py index f59e3781..55e69e70 100644 --- a/test/test_all.py +++ b/test/test_all.py @@ -36,6 +36,8 @@ for script in ["x86/sem.py", "x86/unit/mn_strings.py", "x86/unit/mn_float.py", "x86/unit/mn_stack.py", + "x86/unit/mn_daa.py", + "x86/unit/mn_das.py", "arm/arch.py", "arm/sem.py", "msp430/arch.py", |