fixed class member append hang, additional rizin architectures
parent
e0c42b8406
commit
1de3ddb8d8
|
@ -54,50 +54,72 @@ class _CapstoneBase:
|
||||||
def __lt__(self, other):
|
def __lt__(self, other):
|
||||||
return len(self) < len(other)
|
return len(self) < len(other)
|
||||||
|
|
||||||
|
def __contains__(self, name: str):
|
||||||
|
return hasattr(self, name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def objdump(self) -> str:
|
def objdump(self) -> str:
|
||||||
opcodes = str()
|
if "_objdump" in self:
|
||||||
|
return self._objdump
|
||||||
|
|
||||||
|
_objdump = str()
|
||||||
|
|
||||||
for opcode in self.disassembly:
|
for opcode in self.disassembly:
|
||||||
opcodes += f"{opcode.address:#02x}:\t{opcode.mnemonic}\t{opcode.op_str}\n"
|
_objdump += f"{opcode.address:#02x}:\t{opcode.mnemonic}\t{opcode.op_str}\n"
|
||||||
|
|
||||||
return opcodes
|
self._objdump = _objdump
|
||||||
|
return self._objdump
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def disasm(self) -> list:
|
def disasm(self) -> list:
|
||||||
opcodes = list()
|
if "_disasm" in self:
|
||||||
|
return self._disasm
|
||||||
|
|
||||||
|
_disasm = list()
|
||||||
|
|
||||||
for opcode in self.disassembly:
|
for opcode in self.disassembly:
|
||||||
opcodes.append([opcode.address, opcode.mnemonic, opcode.op_str])
|
if not "unknown" == opcode.mnemonic:
|
||||||
|
_disasm.append([opcode.address, opcode.mnemonic, opcode.op_str])
|
||||||
|
|
||||||
return opcodes
|
self._disasm = _disasm
|
||||||
|
return self._disasm
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def rets(self) -> list:
|
def rets(self) -> list:
|
||||||
if hasattr(self, "_rets"):
|
if "_rets" in self:
|
||||||
return self._rets
|
return self._rets
|
||||||
|
|
||||||
self._rets = list()
|
_rets = list()
|
||||||
|
|
||||||
for opcode in self.disassembly:
|
for opcode in self.disassembly:
|
||||||
if "ret" in opcode.mnemonic:
|
if "ret" in opcode.mnemonic:
|
||||||
self._rets.append(opcode.mnemonic)
|
_rets.append(opcode.mnemonic)
|
||||||
|
|
||||||
|
self._rets = _rets
|
||||||
return self._rets
|
return self._rets
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def ret_rates(self) -> list:
|
def ret_rates(self) -> list:
|
||||||
|
if "_ret_rates" in self:
|
||||||
|
return self._ret_rates
|
||||||
|
|
||||||
rates = dict()
|
rates = dict()
|
||||||
|
|
||||||
for mnemonic in set(self.rets):
|
for mnemonic in set(self.rets):
|
||||||
rates[mnemonic] = self.rets.count(mnemonic)
|
rates[mnemonic] = self.rets.count(mnemonic)
|
||||||
|
|
||||||
listed = sorted(((value, key) for (key, value) in rates.items()), reverse=True)
|
_ret_rates = sorted(
|
||||||
|
((value, key) for (key, value) in rates.items()), reverse=True
|
||||||
|
)
|
||||||
|
|
||||||
return listed
|
self._ret_rates = _ret_rates
|
||||||
|
return self._ret_rates
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mnemonic_rates(self) -> list:
|
def mnemonic_rates(self) -> list:
|
||||||
|
if "_mnemonic_rates" in self:
|
||||||
|
return self._mnemonic_rates
|
||||||
|
|
||||||
mnemonics = list()
|
mnemonics = list()
|
||||||
|
|
||||||
for opcode in self.disassembly:
|
for opcode in self.disassembly:
|
||||||
|
@ -108,9 +130,12 @@ class _CapstoneBase:
|
||||||
for mnemonic in set(mnemonics):
|
for mnemonic in set(mnemonics):
|
||||||
rates[mnemonic] = mnemonics.count(mnemonic)
|
rates[mnemonic] = mnemonics.count(mnemonic)
|
||||||
|
|
||||||
listed = sorted(((value, key) for (key, value) in rates.items()), reverse=True)
|
_mnemonic_rates = sorted(
|
||||||
|
((value, key) for (key, value) in rates.items()), reverse=True
|
||||||
|
)
|
||||||
|
|
||||||
return listed
|
self._mnemonic_rates = _mnemonic_rates
|
||||||
|
return self._mnemonic_rates
|
||||||
|
|
||||||
|
|
||||||
class x86_16(_CapstoneBase):
|
class x86_16(_CapstoneBase):
|
||||||
|
|
|
@ -20,31 +20,36 @@ class _RizinBase:
|
||||||
return self.objdump
|
return self.objdump
|
||||||
|
|
||||||
def __len__(self) -> int:
|
def __len__(self) -> int:
|
||||||
return len(self.disassembly)
|
return len(self.disasm)
|
||||||
|
|
||||||
def __lt__(self, other):
|
def __lt__(self, other):
|
||||||
return len(self) < len(other)
|
return len(self) < len(other)
|
||||||
|
|
||||||
|
def __contains__(self, name: str):
|
||||||
|
return hasattr(self, name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def objdump(self) -> str:
|
def objdump(self) -> str:
|
||||||
if hasattr(self, "_objdump"):
|
if "_objdump" in self:
|
||||||
return self._objdump
|
return self._objdump
|
||||||
|
|
||||||
self._objdump = str()
|
_objdump = str()
|
||||||
|
|
||||||
for each in self.disassembly:
|
for each in self.disassembly:
|
||||||
offset = each.get("offset")
|
offset = each.get("offset")
|
||||||
opcode = each.get("opcode")
|
opcode = each.get("opcode")
|
||||||
self._objdump += f"{offset:#02x}:\t{opcode}\n"
|
if opcode:
|
||||||
|
_objdump += f"{offset:#02x}:\t{opcode}\n"
|
||||||
|
|
||||||
|
self._objdump = _objdump
|
||||||
return self._objdump
|
return self._objdump
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def disasm(self) -> list:
|
def disasm(self) -> list:
|
||||||
if hasattr(self, "_disasm"):
|
if "_disasm" in self:
|
||||||
return self._disasm
|
return self._disasm
|
||||||
|
|
||||||
self._disasm = list()
|
_disasm = list()
|
||||||
|
|
||||||
for each in self.disassembly:
|
for each in self.disassembly:
|
||||||
offset = each.get("offset")
|
offset = each.get("offset")
|
||||||
|
@ -53,30 +58,32 @@ class _RizinBase:
|
||||||
if opcode:
|
if opcode:
|
||||||
mnemonic = opcode.split(" ")[0]
|
mnemonic = opcode.split(" ")[0]
|
||||||
opcode = opcode.split(" ")[1:]
|
opcode = opcode.split(" ")[1:]
|
||||||
else:
|
_disasm.append([offset, mnemonic, opcode])
|
||||||
mnemonic = None
|
|
||||||
|
|
||||||
self._disasm.append([offset, mnemonic, opcode])
|
|
||||||
|
|
||||||
|
self._disasm = _disasm
|
||||||
return self._disasm
|
return self._disasm
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def rets(self) -> list:
|
def rets(self) -> list:
|
||||||
if hasattr(self, "_rets"):
|
if "_rets" in self:
|
||||||
return self._rets
|
return self._rets
|
||||||
|
|
||||||
self._rets = list()
|
_rets = list()
|
||||||
|
|
||||||
for each in self.disasm:
|
for each in self.disasm:
|
||||||
_, mnemonic, _ = each
|
_, mnemonic, _ = each
|
||||||
|
|
||||||
if mnemonic and "ret" in mnemonic:
|
if mnemonic and "ret" in mnemonic:
|
||||||
self._rets.append(mnemonic)
|
_rets.append(mnemonic)
|
||||||
|
|
||||||
|
self._rets = _rets
|
||||||
return self._rets
|
return self._rets
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def ret_rates(self) -> list:
|
def ret_rates(self) -> list:
|
||||||
|
if "_ret_rates" in self:
|
||||||
|
return self._ret_rates
|
||||||
|
|
||||||
rates = dict()
|
rates = dict()
|
||||||
|
|
||||||
for mnemonic in set(self.rets):
|
for mnemonic in set(self.rets):
|
||||||
|
@ -86,10 +93,14 @@ class _RizinBase:
|
||||||
((value, key) for (key, value) in rates.items()), reverse=True
|
((value, key) for (key, value) in rates.items()), reverse=True
|
||||||
)
|
)
|
||||||
|
|
||||||
return _ret_rates
|
self._ret_rates = _ret_rates
|
||||||
|
return self._ret_rates
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mnemonic_rates(self) -> list:
|
def mnemonic_rates(self) -> list:
|
||||||
|
if "_mnemonic_rates" in self:
|
||||||
|
return self._mnemonic_rates
|
||||||
|
|
||||||
mnemonics = list()
|
mnemonics = list()
|
||||||
|
|
||||||
for each in self.disasm:
|
for each in self.disasm:
|
||||||
|
@ -107,8 +118,102 @@ class _RizinBase:
|
||||||
((value, key) for (key, value) in rates.items()), reverse=True
|
((value, key) for (key, value) in rates.items()), reverse=True
|
||||||
)
|
)
|
||||||
|
|
||||||
return _mnemonic_rates
|
self._mnemonic_rates = _mnemonic_rates
|
||||||
|
return self._mnemonic_rates
|
||||||
|
|
||||||
|
|
||||||
|
class _6502_8(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=6502", "e asm.bits=8"]
|
||||||
|
name = "6502/NES/C64/Tamagotchi/T-1000 CPU"
|
||||||
|
|
||||||
|
|
||||||
|
class _6502_16(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=6502", "e asm.bits=16"]
|
||||||
|
name = "6502/NES/C64/Tamagotchi/T-1000 CPU"
|
||||||
|
|
||||||
|
|
||||||
|
class _8051(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=8051", "e asm.bits=8"]
|
||||||
|
name = "8051 Intel CPU"
|
||||||
|
|
||||||
|
|
||||||
|
class amd29k(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=amd29k", "e asm.bits=32"]
|
||||||
|
name = "AMD 29k RISC CPU"
|
||||||
|
|
||||||
|
|
||||||
|
class arc_16(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arc", "e asm.bits=16"]
|
||||||
|
name = "Argonaut RISC Core"
|
||||||
|
|
||||||
|
|
||||||
|
class arc_32(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arc", "e asm.bits=32"]
|
||||||
|
name = "Argonaut RISC Core"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_as_16(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm.as", "e asm.bits=16"]
|
||||||
|
name = "as ARM Assembler (use RZ_ARM32_AS and RZ_ARM64_AS environment)"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_as_32(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm.as", "e asm.bits=32"]
|
||||||
|
name = "as ARM Assembler (use RZ_ARM32_AS and RZ_ARM64_AS environment)"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_as_64(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm.as", "e asm.bits=64"]
|
||||||
|
name = "as ARM Assembler (use RZ_ARM32_AS and RZ_ARM64_AS environment)"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_16(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm", "e asm.bits=16"]
|
||||||
|
name = "Capstone ARM disassembler"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_32(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm", "e asm.bits=32"]
|
||||||
|
name = "Capstone ARM disassembler"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_64(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm", "e asm.bits=64"]
|
||||||
|
name = "Capstone ARM disassembler"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_gnu_16(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm.gnu", "e asm.bits=16"]
|
||||||
|
name = "Acorn RISC Machine CPU"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_gnu_32(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm.gnu", "e asm.bits=32"]
|
||||||
|
name = "Acorn RISC Machine CPU"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_gnu_64(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm.gnu", "e asm.bits=64"]
|
||||||
|
name = "Acorn RISC Machine CPU"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_wine_16(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm.winedbg", "e asm.bits=16"]
|
||||||
|
name = "WineDBG's ARM disassembler"
|
||||||
|
|
||||||
|
|
||||||
|
class arm_wine_32(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=arm.winedbg", "e asm.bits=32"]
|
||||||
|
name = "WineDBG's ARM disassembler"
|
||||||
|
|
||||||
|
|
||||||
class x86_16(_RizinBase):
|
class x86_16(_RizinBase):
|
||||||
arch_cmds = ["e asm.arch=x86", "e asm.bits=16"]
|
arch_cmds = ["e asm.arch=x86", "e asm.bits=16"]
|
||||||
|
|
||||||
|
|
||||||
|
class x86_32(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=x86", "e asm.bits=32"]
|
||||||
|
|
||||||
|
|
||||||
|
class x86_64(_RizinBase):
|
||||||
|
arch_cmds = ["e asm.arch=x86", "e asm.bits=64"]
|
||||||
|
|
|
@ -111,7 +111,26 @@ def subdisassem_script():
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
rizin_archs = [
|
rizin_archs = [
|
||||||
|
rizin_wrapper._6502_8,
|
||||||
|
rizin_wrapper._6502_16,
|
||||||
|
rizin_wrapper._8051,
|
||||||
|
rizin_wrapper.amd29k,
|
||||||
|
rizin_wrapper.arc_16,
|
||||||
|
rizin_wrapper.arc_32,
|
||||||
|
rizin_wrapper.arm_as_16,
|
||||||
|
rizin_wrapper.arm_as_32,
|
||||||
|
rizin_wrapper.arm_as_64,
|
||||||
|
rizin_wrapper.arm_16,
|
||||||
|
rizin_wrapper.arm_32,
|
||||||
|
rizin_wrapper.arm_64,
|
||||||
|
rizin_wrapper.arm_gnu_16,
|
||||||
|
rizin_wrapper.arm_gnu_32,
|
||||||
|
rizin_wrapper.arm_gnu_64,
|
||||||
|
rizin_wrapper.arm_wine_16,
|
||||||
|
rizin_wrapper.arm_wine_32,
|
||||||
rizin_wrapper.x86_16,
|
rizin_wrapper.x86_16,
|
||||||
|
rizin_wrapper.x86_32,
|
||||||
|
rizin_wrapper.x86_64,
|
||||||
]
|
]
|
||||||
|
|
||||||
for arch in rizin_archs:
|
for arch in rizin_archs:
|
||||||
|
|
Loading…
Reference in New Issue