Use correct endianness for Capstone disassemblers

pull/157/head
Zach Riggle 9 years ago
parent aadd83f7d5
commit bb55cbf5b8

@ -33,13 +33,14 @@ last_arch = None
CapstoneArch = { CapstoneArch = {
'arm': Cs(CS_ARCH_ARM, CS_MODE_ARM), ('arm', 'little'): Cs(CS_ARCH_ARM, CS_MODE_ARM),
'aarch64': Cs(CS_ARCH_ARM64, CS_MODE_ARM), ('aarch64', 'little'): Cs(CS_ARCH_ARM64, CS_MODE_ARM),
'i386': Cs(CS_ARCH_X86, CS_MODE_32), ('i386', 'little'): Cs(CS_ARCH_X86, CS_MODE_32),
'x86-64': Cs(CS_ARCH_X86, CS_MODE_64), ('x86-64', 'little'): Cs(CS_ARCH_X86, CS_MODE_64),
'powerpc': Cs(CS_ARCH_PPC, CS_MODE_32), ('powerpc', 'little'): Cs(CS_ARCH_PPC, CS_MODE_32),
'mips': Cs(CS_ARCH_MIPS, CS_MODE_32), ('mips', 'little'): Cs(CS_ARCH_MIPS, CS_MODE_32),
'sparc': Cs(CS_ARCH_SPARC, 0), ('mips', 'big'): Cs(CS_ARCH_MIPS, CS_MODE_32 | CS_MODE_BIG_ENDIAN),
('sparc', 'little'): Cs(CS_ARCH_SPARC, 0),
} }
for cs in CapstoneArch.values(): for cs in CapstoneArch.values():
@ -59,11 +60,14 @@ backward_cache = collections.defaultdict(lambda: 0)
def get_disassembler(pc): def get_disassembler(pc):
arch = pwndbg.arch.current arch = pwndbg.arch.current
d = CapstoneArch[arch] endian = pwndbg.arch.endian
d = CapstoneArch[(arch, endian)]
if arch in ('arm', 'aarch64'): if arch in ('arm', 'aarch64'):
d.mode = {0:CS_MODE_ARM,0x20:CS_MODE_THUMB}[pwndbg.regs.cpsr & 0x20] d.mode = {0:CS_MODE_ARM,0x20:CS_MODE_THUMB}[pwndbg.regs.cpsr & 0x20]
else: else:
d.mode = {4:CS_MODE_32, 8:CS_MODE_64}[pwndbg.arch.ptrsize] d.mode = {4:CS_MODE_32, 8:CS_MODE_64}[pwndbg.arch.ptrsize]
return d return d
@pwndbg.memoize.reset_on_cont @pwndbg.memoize.reset_on_cont

Loading…
Cancel
Save