diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2021-08-18 06:39:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-18 06:39:00 +0200 |
| commit | 6fa54ea61f193775970240a34d67a6423ee146d7 (patch) | |
| tree | e12c6cf00c9832e0782cc16edf71580e789802b2 | |
| parent | 24642064db3f1b432f5498ad07abb04bcdf3a008 (diff) | |
| parent | 856c8d1f7b00593e3cc4605d2dc835d9fc46effa (diff) | |
| download | miasm-6fa54ea61f193775970240a34d67a6423ee146d7.tar.gz miasm-6fa54ea61f193775970240a34d67a6423ee146d7.zip | |
Merge pull request #1378 from serpilliere/fix_interference_computation
Fix interference computation
| -rw-r--r-- | miasm/analysis/data_flow.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/miasm/analysis/data_flow.py b/miasm/analysis/data_flow.py index b22c4f83..ae44ed59 100644 --- a/miasm/analysis/data_flow.py +++ b/miasm/analysis/data_flow.py @@ -1926,16 +1926,20 @@ class State(object): # Special case: # @32[ESP + 0xFFFFFFFE], @32[ESP] # Both memories alias - if offset1 <= int(base1.mask) - size1: + if offset1 + size1 <= int(base1.mask) + 1: + # @32[ESP + 0xFFFFFFFC] => [0xFFFFFFFC, 0xFFFFFFFF] interval1 = interval([(offset1, offset1 + dst.size // 8 - 1)]) else: + # @32[ESP + 0xFFFFFFFE] => [0x0, 0x1] U [0xFFFFFFFE, 0xFFFFFFFF] interval1 = interval([(offset1, int(base1.mask))]) - interval1 += interval([(0, int(base1.mask) - offset1 )]) - if offset2 <= int(base2.mask) - size2: + interval1 += interval([(0, size1 - (int(base1.mask) + 1 - offset1) - 1 )]) + if offset2 + size2 <= int(base2.mask) + 1: + # @32[ESP + 0xFFFFFFFC] => [0xFFFFFFFC, 0xFFFFFFFF] interval2 = interval([(offset2, offset2 + src.size // 8 - 1)]) else: + # @32[ESP + 0xFFFFFFFE] => [0x0, 0x1] U [0xFFFFFFFE, 0xFFFFFFFF] interval2 = interval([(offset2, int(base2.mask))]) - interval2 += interval([(0, int(base2.mask) - offset2 )]) + interval2 += interval([(0, size2 - (int(base2.mask) + 1 - offset2) - 1)]) if (interval1 & interval2).empty: continue return True |