Skip to content
Merged

Fix bug #1225

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 20 additions & 18 deletions qiling/cc/arm.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,35 @@

from unicorn.arm_const import UC_ARM_REG_R0, UC_ARM_REG_R1, UC_ARM_REG_R2, UC_ARM_REG_R3
from unicorn.arm64_const import (
UC_ARM64_REG_X0, UC_ARM64_REG_X1, UC_ARM64_REG_X2, UC_ARM64_REG_X3,
UC_ARM64_REG_X4, UC_ARM64_REG_X5, UC_ARM64_REG_X6, UC_ARM64_REG_X7
UC_ARM64_REG_X0, UC_ARM64_REG_X1, UC_ARM64_REG_X2, UC_ARM64_REG_X3,
UC_ARM64_REG_X4, UC_ARM64_REG_X5, UC_ARM64_REG_X6, UC_ARM64_REG_X7
)

from qiling.cc import QlCommonBaseCC

class QlArmBaseCC(QlCommonBaseCC):
"""Calling convention base class for ARM-based systems.
Supports arguments passing over registers and stack.
"""
"""Calling convention base class for ARM-based systems.
Supports arguments passing over registers and stack.
"""

@staticmethod
def getNumSlots(argbits: int) -> int:
return 1
@staticmethod
def getNumSlots(argbits: int) -> int:
return 1

def setReturnAddress(self, addr: int) -> None:
# TODO: do we need to update LR?
self.arch.stack_push(addr)
def setReturnAddress(self, addr: int) -> None:
# TODO: do we need to update LR?
self.arch.stack_push(addr)

def unwind(self, nslots: int) -> int:
# TODO: cleanup?
return self.arch.stack_pop()
def unwind(self, nslots: int) -> int:
# TODO: cleanup?
return self.arch.stack_pop()

class aarch64(QlArmBaseCC):
_retreg = UC_ARM64_REG_X0
_argregs = (UC_ARM64_REG_X0, UC_ARM64_REG_X1, UC_ARM64_REG_X2, UC_ARM64_REG_X3, UC_ARM64_REG_X4, UC_ARM64_REG_X5, UC_ARM64_REG_X6, UC_ARM64_REG_X7) + (None, ) * 8
_retaddr_on_stack = False
_retreg = UC_ARM64_REG_X0
_argregs = (UC_ARM64_REG_X0, UC_ARM64_REG_X1, UC_ARM64_REG_X2, UC_ARM64_REG_X3, UC_ARM64_REG_X4, UC_ARM64_REG_X5, UC_ARM64_REG_X6, UC_ARM64_REG_X7) + (None, ) * 8

class aarch32(QlArmBaseCC):
_retreg = UC_ARM_REG_R0
_argregs = (UC_ARM_REG_R0, UC_ARM_REG_R1, UC_ARM_REG_R2, UC_ARM_REG_R3) + (None, ) * 12
_retaddr_on_stack = False
_retreg = UC_ARM_REG_R0
_argregs = (UC_ARM_REG_R0, UC_ARM_REG_R1, UC_ARM_REG_R2, UC_ARM_REG_R3) + (None, ) * 12
Loading