From b57310c9b50ae52946a78e4e4c3d5787bb6fcf3e Mon Sep 17 00:00:00 2001 From: Jennifer Taylor Date: Fri, 10 Sep 2021 19:14:48 +0000 Subject: [PATCH] Fix initialized memory lookup, implement "movzx" instruction. --- bemani/common/pe.py | 17 +++++++++++++++-- bemani/utils/psmap.py | 1 + bemani/utils/struct.py | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/bemani/common/pe.py b/bemani/common/pe.py index 6c63e0f..2c63aa3 100644 --- a/bemani/common/pe.py +++ b/bemani/common/pe.py @@ -28,8 +28,8 @@ class Memory: else: # Attempt to return the default. for virtual_start in self.defaults: - if offset >= virtual_start and offset < (virtual_start + len(self.defaults[virtual_start])): - data.append(self.defaults[virtual_start][offset - virtual_start]) + if i >= virtual_start and i < (virtual_start + len(self.defaults[virtual_start])): + data.append(self.defaults[virtual_start][i - virtual_start]) break else: # Nothing here, return initialized RAM. @@ -225,6 +225,19 @@ class PEFile: result = fetch(registers, memory, size, src) assign(registers, memory, size, dest, result) + elif mnemonic == "movzx": + dest = formatter.format_operand(inst, 0) + src = formatter.format_operand(inst, 1) + + vprint(f"movzx {dest}, {src}") + + srcsize = get_size(src) + dstsize = get_size(dest) + if srcsize is None or dstsize is None: + raise Exception(f"Could not determine size of {mnemonic} operation!") + result = fetch(registers, memory, srcsize, src) + assign(registers, memory, dstsize, dest, result) + elif mnemonic == "add": dest = formatter.format_operand(inst, 0) amt = formatter.format_operand(inst, 1) diff --git a/bemani/utils/psmap.py b/bemani/utils/psmap.py index 5047a5c..e5e4d43 100644 --- a/bemani/utils/psmap.py +++ b/bemani/utils/psmap.py @@ -262,6 +262,7 @@ def main() -> None: ) parser.add_argument( "--verbose", + "-v", help="Display verbose parsing info.", action="store_true", default=False, diff --git a/bemani/utils/struct.py b/bemani/utils/struct.py index 31f4b28..e9c3f17 100644 --- a/bemani/utils/struct.py +++ b/bemani/utils/struct.py @@ -307,6 +307,7 @@ Ih&h = Decodes an array of structures containing an unsigned integer and two sho ) parser.add_argument( "--verbose", + "-v", help="Display verbose parsing info.", action="store_true", default=False,