Browse code

disasm endianess fixes

git-svn: trunk@4155

aCaB authored on 2008/08/31 22:32:42
Showing 3 changed files
... ...
@@ -1,3 +1,7 @@
1
+Sun Aug 31 15:31:04 CEST 2008 (acab)
2
+------------------------------------
3
+  * libclamav/disasm, unit_tests: more endianess issues fixed (that should eb all)
4
+
1 5
 Sun Aug 31 04:23:12 CEST 2008 (acab)
2 6
 ------------------------------------
3 7
   * libclamunrar/unrarvm.c: big-endian fixes
... ...
@@ -1189,13 +1189,13 @@ static void spam_x86(struct DISASMED *s, char *hr) {
1189 1189
     case ACCESS_NOARG:
1190 1190
       break;
1191 1191
     case ACCESS_IMM:
1192
-      sprintf(hr, "%s%s %x", hr, comma, s->args[i].arg.d);
1192
+      sprintf(hr, "%s%s %llx", hr, comma, s->args[i].arg.q);
1193 1193
       break;
1194 1194
     case ACCESS_REL:
1195
-      if (s->args[i].arg.rd >=0)
1196
-	sprintf(hr, "%s%s %x", hr, comma, s->args[i].arg.d);
1195
+      if (s->args[i].arg.rq >=0)
1196
+	sprintf(hr, "%s%s %llx", hr, comma, s->args[i].arg.q);
1197 1197
       else
1198
-	sprintf(hr, "%s%s -%x", hr, comma, -s->args[i].arg.rd);
1198
+	sprintf(hr, "%s%s -%x", hr, comma, -s->args[i].arg.rq);
1199 1199
       break;
1200 1200
     case ACCESS_REG:
1201 1201
       sprintf(hr, "%s%s %s", hr, comma, x86regs[s->args[i].reg]);
... ...
@@ -1403,7 +1403,7 @@ static uint8_t *disasm_x86(uint8_t *command, unsigned int len, struct DISASMED *
1403 1403
 	s->args[0].size = sz>>1;	/* FIXME: size does matter - 6aff vs 666aff :( */
1404 1404
 	for (i=0; i<sz; i++) {
1405 1405
 	  GETBYTE(b);
1406
-	  s->args[0].arg.q+=b<<(i*8);
1406
+	  s->args[0].arg.q+=(uint64_t)b<<(i*8);
1407 1407
 	}
1408 1408
 	if (x86ops[table][s->table_op].dmethod==ADDR_RELJ) {
1409 1409
 	  s->args[0].arg.q<<=((8-sz)*8);
... ...
@@ -1718,7 +1718,7 @@ void disasmbuf(uint8_t *buff, unsigned int len, int fd) {
1718 1718
       case ACCESS_REG:
1719 1719
 	w.arg[i][1] = s.args[i].reg;
1720 1720
       default:
1721
-	cli_writeint32(&w.arg[i][2], s.args[i].arg.d);
1721
+	cli_writeint32(&w.arg[i][2], s.args[i].arg.q);
1722 1722
 	cli_writeint32(&w.arg[i][6], s.args[i].arg.q>>32);
1723 1723
       }
1724 1724
     }
1725 1725
Binary files a/unit_tests/input/disasmref.bin and b/unit_tests/input/disasmref.bin differ