diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2015-08-08 18:04:38 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2015-08-08 18:04:38 +0200 |
| commit | 5e2842a5847ceeb9903ef5b4c66cab37f846f222 (patch) | |
| tree | a378cdca45c90eb296016ce3e160b0cc315345e2 | |
| parent | dcc488ec39d9a96b70c728ccdbcd43e62b25ae99 (diff) | |
| download | miasm-5e2842a5847ceeb9903ef5b4c66cab37f846f222.tar.gz miasm-5e2842a5847ceeb9903ef5b4c66cab37f846f222.zip | |
Jitter/vm_mngr: fix rot_right operator
| -rw-r--r-- | miasm2/jitter/vm_mngr.c | 13 | ||||
| -rw-r--r-- | miasm2/jitter/vm_mngr.h | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/miasm2/jitter/vm_mngr.c b/miasm2/jitter/vm_mngr.c index 23464bfb..bf1eb7df 100644 --- a/miasm2/jitter/vm_mngr.c +++ b/miasm2/jitter/vm_mngr.c @@ -821,11 +821,11 @@ uint64_t rot_left(uint64_t size, uint64_t a, uint64_t b) } } -unsigned int rot_right(unsigned int size, unsigned int a, unsigned int b) +uint64_t rot_right(uint64_t size, uint64_t a, uint64_t b) { - unsigned int tmp; + uint64_t tmp; - b = b&0x1F; + b = b&0x3F; b %= size; switch(size){ case 8: @@ -837,8 +837,11 @@ unsigned int rot_right(unsigned int size, unsigned int a, unsigned int b) case 32: tmp = ((a&0xFFFFFFFF) >> b) | (a << (size-b)); return tmp&0xffffffff; + case 64: + tmp = ((a&0xFFFFFFFFFFFFFFFF) >> b) | (a << (size-b)); + return tmp&0xFFFFFFFFFFFFFFFF; default: - fprintf(stderr, "inv size in rotleft %d\n", size); + fprintf(stderr, "inv size in rotright %"PRIX64"\n", size); exit(0); } } @@ -1699,3 +1702,5 @@ uint64_t get_exception_flag(vm_mngr_t* vm_mngr) { return vm_mngr->exception_flags; } + + diff --git a/miasm2/jitter/vm_mngr.h b/miasm2/jitter/vm_mngr.h index fc346cc5..0d3bdf7c 100644 --- a/miasm2/jitter/vm_mngr.h +++ b/miasm2/jitter/vm_mngr.h @@ -205,7 +205,7 @@ unsigned int umul16_hi(unsigned short a, unsigned short b); unsigned int div_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c); unsigned int rem_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c); uint64_t rot_left(uint64_t size, uint64_t a, uint64_t b); -unsigned int rot_right(unsigned int size, unsigned int a, unsigned int b); +uint64_t rot_right(uint64_t size, uint64_t a, uint64_t b); int rcl_rez_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf); int rcl_cf_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf); |