Browse code

disasm fixes

git-svn: trunk@4144

aCaB authored on 2008/08/26 09:56:07
Showing 4 changed files
... ...
@@ -1,3 +1,7 @@
1
+Tue Aug 26 02:52:10 CEST 2008 (acab)
2
+------------------------------------
3
+  * libclamav/disasm*; unit_tests/check_disasm: some fixes, work in progress
4
+
1 5
 Mon Aug 25 23:52:04 CEST 2008 (tk)
2 6
 ----------------------------------
3 7
   * drop support for Cygwin (due to broken ClamAV builds)
... ...
@@ -361,6 +361,7 @@ static const char *mnemonic[] = {
361 361
   "loop",
362 362
   "loope",
363 363
   "loopne",
364
+  "jecxz",
364 365
   "lsl",
365 366
   "lss",
366 367
   "ltr",
... ...
@@ -857,7 +858,7 @@ static const struct OPCODES x86ops[2][256] = {{
857 857
   PUSHOP(0xe0, ADDR_RELJ, SIZE_BYTE, ADDR_NOADDR, SIZE_NOSIZE, OP_LOOPNE),
858 858
   PUSHOP(0xe1, ADDR_RELJ, SIZE_BYTE, ADDR_NOADDR, SIZE_NOSIZE, OP_LOOPE),
859 859
   PUSHOP(0xe2, ADDR_RELJ, SIZE_BYTE, ADDR_NOADDR, SIZE_NOSIZE, OP_LOOP),
860
-  PUSHOP(0xe3, ADDR_RELJ, SIZE_BYTE, ADDR_NOADDR, SIZE_NOSIZE, OP_LOOPNE),
860
+  PUSHOP(0xe3, ADDR_RELJ, SIZE_BYTE, ADDR_NOADDR, SIZE_NOSIZE, OP_JECXZ),
861 861
   PUSHOP(0xe4, ADDR_REG_EAX, SIZE_BYTE, ADDR_IMMED, SIZE_BYTE, OP_IN),
862 862
   PUSHOP(0xe5, ADDR_REG_EAX, SIZE_WD, ADDR_IMMED, SIZE_BYTE, OP_IN),
863 863
   PUSHOP(0xe6, ADDR_IMMED, SIZE_BYTE, ADDR_REG_EAX, SIZE_BYTE, OP_OUT),
... ...
@@ -1709,7 +1710,7 @@ void disasmbuf(uint8_t *buff, unsigned int len, int fd) {
1709 1709
       switch(s.args[i].access) {
1710 1710
       case ACCESS_MEM:
1711 1711
 	w.arg[i][2]=s.args[i].arg.marg.r1;
1712
-	w.arg[i][3]=s.args[i].arg.marg.r1;
1712
+	w.arg[i][3]=s.args[i].arg.marg.r2;
1713 1713
 	w.arg[i][4]=s.args[i].arg.marg.scale;
1714 1714
 	w.arg[i][5]=0;
1715 1715
 	cli_writeint32(&w.arg[i][6], s.args[i].arg.marg.disp);
... ...
@@ -137,6 +137,7 @@ enum X86OPS {
137 137
   OP_LOOP,
138 138
   OP_LOOPE,
139 139
   OP_LOOPNE,
140
+  OP_JECXZ,
140 141
   OP_LSL,
141 142
   OP_LSS,
142 143
   OP_LTR,
... ...
@@ -46,6 +46,61 @@ START_TEST (test_disasm_basic) {
46 46
 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
47 47
   int fd = mkstemp(file);
48 48
   uint8_t buf[] = {0x33, 0xc0};
49
+/*   uint8_t buf[] = { */
50
+/*     /\* m00/rm000 - add [eax], al *\/ */
51
+/*     0x00, 0x00, */
52
+/*     /\* m00/rm011 - add [ebx], edi *\/ */
53
+/*     0x01, 0x3b, */
54
+/*     /\* m00/rm100/ss00/idx010/b100 - or [edx*1+esp], dh *\/ */
55
+/*     0x08, 0x34, 0x14, */
56
+/*     /\* m00/rm100/ss00/idx100/b001 - or [0*1+ecx], edi *\/ */
57
+/*     0x09, 0x3c, 0x21, */
58
+/*     /\* m00/rm100/ss00/idx010/b101 - adc [edx*1+0x42614361], ah *\/ */
59
+/*     0x10, 0x24, 0x15, 0x61, 0x43, 0x61, 0x42, */
60
+/*     /\* m00/rm100/ss10/idx111/b110 - adc [edi*4+esi], ecx *\/ */
61
+/*     0x11, 0x0c, 0xbe, */
62
+/*     /\* m00/rm101 - sbb [0xaaccaabb], dl *\/ */
63
+/*     0x18, 0x15, 0xbb, 0xaa, 0xcc, 0xaa, */
64
+/*     /\* m01/rm001 - sbb [ecx+0xffffffff], esp *\/ */
65
+/*     0x19, 0x61, 0xff, */
66
+/*     /\* m10/rm100/ss01/idx110/b010 - and [esi*2+edx+0x0b0a0c0a], ch *\/ */
67
+/*     0x20, 0xac, 0x72, 0x0a, 0x0c, 0x0a, 0x0b, */
68
+/*     /\* m10/rm100/ss11/idx011/b101 - and [eax*8+ebp+0xabacabac], ebx *\/ */
69
+/*     0x21, 0x9c, 0xc5, 0xac, 0xab, 0xac, 0xab, */
70
+/*     /\* m11/rm100 - sub ah, dh *\/ */
71
+/*     0x28, 0xf4, */
72
+/*     /\* m11/rm101 - sub ebp, edx *\/ */
73
+/*     0x29, 0xd5, */
74
+/*     /\* mov al, 17 *\/ */
75
+/*     0x04, 0x17, */
76
+/*     /\* pop es *\/ */
77
+/*     0x07, */
78
+/*     /\* push cs *\/ */
79
+/*     0x0e, */
80
+/*     /\* adc eax, 0x37333331 *\/ */
81
+/*     0x15, 0x31, 0x33, 0x33, 0x37, */
82
+/*     /\* sbb ax, 3713 *\/ */
83
+/*     0x66, 0x1d, 0x13, 0x37, */
84
+/*     /\* inc esi *\/ */
85
+/*     0x46, */
86
+/*     /\* jnc +0x31 *\/ */
87
+/*     0x73, 0x31, */
88
+/*     /\* pop [edx] *\/ */
89
+/*     0x8f, 0x02, */
90
+/*     /\* nop *\/ */
91
+/*     0x90, */
92
+/*     /\* call far 1122:33445566 *\/ */
93
+/*     0x9a, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, */
94
+/*     /\* mov [11223344], eax *\/ */
95
+/*     0xa2, 0x44, 0x33, 0x22, 0x11, */
96
+/*     /\* enter 1122, 33 *\/ */
97
+/*     0xc8, 0x22, 0x11, 0x33, */
98
+/*     /\* rcl [ecx], 1 *\/ */
99
+/*     0xd0, 0x11, */
100
+    
101
+/*     /\* WIP... *\/ */
102
+
103
+/*   }; */
49 104
   off_t *d;
50 105
   off_t size;
51 106