diff options
| author | Ajax <commial@gmail.com> | 2018-01-26 17:25:22 +0100 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2018-01-26 17:25:22 +0100 |
| commit | ab8849535f972d596f87a00071c382cb693fa072 (patch) | |
| tree | 2e223bd356efe662ab0ad26292d81865d6c9f216 /miasm2/jitter/vm_mngr.c | |
| parent | b1aa02dffd6f321084d6b3c337ad42b131560e88 (diff) | |
| download | miasm-ab8849535f972d596f87a00071c382cb693fa072.tar.gz miasm-ab8849535f972d596f87a00071c382cb693fa072.zip | |
Fix BSR / BSL / CLZ implementation to avoid signed overflow
Diffstat (limited to '')
| -rw-r--r-- | miasm2/jitter/vm_mngr.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/miasm2/jitter/vm_mngr.c b/miasm2/jitter/vm_mngr.c index 59cbdf6e..c628aeff 100644 --- a/miasm2/jitter/vm_mngr.c +++ b/miasm2/jitter/vm_mngr.c @@ -843,24 +843,23 @@ unsigned int rcr_rez_op(unsigned int size, unsigned int a, unsigned int b, unsig return tmp; } -unsigned int x86_bsr(unsigned int size, uint64_t src) +unsigned int x86_bsr(uint64_t size, uint64_t src) { - int i; + uint64_t i; for (i=size-1; i>=0; i--){ - if (src & (1<<i)) + if (src & (1ull << i)) return i; } fprintf(stderr, "sanity check error bsr\n"); exit(0); } -unsigned int x86_bsf(unsigned int size, uint64_t src) +unsigned int x86_bsf(uint64_t size, uint64_t src) { - int i; - + uint64_t i; for (i=0; i<size; i++){ - if (src & (1<<i)) + if (src & (1ull << i)) return i; } fprintf(stderr, "sanity check error bsf\n"); |