From aa25aac332dcda6cf2503252e2ee6fb75bfe3c77 Mon Sep 17 00:00:00 2001 From: veritas501 Date: Tue, 11 May 2021 14:42:15 +0800 Subject: [PATCH] fix(disasm,emulate): support mips32r6 When disasm mips32r6 using capstone or emulate mips32r6 using unicorn, MODE should be XX_MODE_MIPS32R6 --- pwndbg/disasm/__init__.py | 3 +++ pwndbg/emu/emulator.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/pwndbg/disasm/__init__.py b/pwndbg/disasm/__init__.py index 59386d93f..c2b684f0d 100644 --- a/pwndbg/disasm/__init__.py +++ b/pwndbg/disasm/__init__.py @@ -109,6 +109,9 @@ def get_disassembler(pc): elif pwndbg.arch.current == 'i8086': extra = CS_MODE_16 + + elif pwndbg.arch.current == 'mips' and 'isa32r6' in gdb.newest_frame().architecture().name(): + extra = CS_MODE_MIPS32R6 else: extra = None diff --git a/pwndbg/emu/emulator.py b/pwndbg/emu/emulator.py index 1511849d4..49773a242 100644 --- a/pwndbg/emu/emulator.py +++ b/pwndbg/emu/emulator.py @@ -201,6 +201,9 @@ class Emulator: elif arch in ('arm', 'aarch64'): mode |= U.UC_MODE_THUMB if (pwndbg.regs.cpsr & (1<<5)) else U.UC_MODE_ARM + elif arch == 'mips' and 'isa32r6' in gdb.newest_frame().architecture().name(): + mode |= U.UC_MODE_MIPS32R6 + else: mode |= {4:U.UC_MODE_32, 8:U.UC_MODE_64}[pwndbg.arch.ptrsize]