26 lines
757 B
Python
26 lines
757 B
Python
|
#!/usr/bin/env python3
|
||
|
#
|
||
|
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||
|
|
||
|
from qiling.cc import QlCommonBaseCC
|
||
|
|
||
|
from unicorn.riscv_const import (
|
||
|
UC_RISCV_REG_A0, UC_RISCV_REG_A1, UC_RISCV_REG_A2,
|
||
|
UC_RISCV_REG_A3, UC_RISCV_REG_A4, UC_RISCV_REG_A5
|
||
|
)
|
||
|
|
||
|
class riscv(QlCommonBaseCC):
|
||
|
"""Default calling convention for RISCV
|
||
|
First 6 arguments are passed in regs, the rest are passed on the stack.
|
||
|
"""
|
||
|
|
||
|
_retreg = UC_RISCV_REG_A0
|
||
|
_argregs = (UC_RISCV_REG_A0, UC_RISCV_REG_A1, UC_RISCV_REG_A2, UC_RISCV_REG_A3, UC_RISCV_REG_A4, UC_RISCV_REG_A5) + (None, ) * 10
|
||
|
|
||
|
@staticmethod
|
||
|
def getNumSlots(argbits: int):
|
||
|
return 1
|
||
|
|
||
|
def setReturnAddress(self, addr: int):
|
||
|
self.arch.regs.ra = addr
|