25 lines
716 B
Python
25 lines
716 B
Python
|
#!/usr/bin/env python3
|
||
|
#
|
||
|
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||
|
|
||
|
from unicorn.mips_const import UC_MIPS_REG_V0, UC_MIPS_REG_A0, UC_MIPS_REG_A1, UC_MIPS_REG_A2, UC_MIPS_REG_A3
|
||
|
|
||
|
from qiling.cc import QlCommonBaseCC
|
||
|
|
||
|
class mipso32(QlCommonBaseCC):
|
||
|
_retreg = UC_MIPS_REG_V0
|
||
|
_argregs = (UC_MIPS_REG_A0, UC_MIPS_REG_A1, UC_MIPS_REG_A2, UC_MIPS_REG_A3) + (None, ) * 12
|
||
|
_shadow = 4
|
||
|
_retaddr_on_stack = False
|
||
|
|
||
|
def setReturnAddress(self, addr: int):
|
||
|
self.arch.regs.ra = addr
|
||
|
|
||
|
@staticmethod
|
||
|
def getNumSlots(argbits: int):
|
||
|
return 1
|
||
|
|
||
|
def unwind(self, nslots: int) -> int:
|
||
|
# TODO: stack frame unwiding?
|
||
|
return self.arch.regs.ra
|