A class responsible for performing architecture specific operations in case of an ARM64 chip emulation. More...
#include <arch_arm64.hpp>
Public Member Functions | |
| ArchManagerARM64 () | |
| ks_engine * | curr_ks () override |
| csh * | curr_cs () override |
| arion::ADDR | dump_tls () override |
| void | load_tls (arion::ADDR new_tls) override |
Public Member Functions inherited from arion::ArchManager | |
| virtual | ~ArchManager ()=default |
| std::shared_ptr< ARCH_ATTRIBUTES > | get_attrs () |
| bool | does_hook_intr () |
| std::string | get_name_by_syscall_no (uint64_t syscall_no) |
| bool | has_syscall_with_name (std::string name) |
| uint64_t | get_syscall_no_by_name (std::string name) |
| std::vector< REG > | get_context_regs () |
| std::unique_ptr< std::map< REG, RVAL > > | dump_regs () |
| void | load_regs (std::unique_ptr< std::map< REG, RVAL > > regs) |
| bool | has_idt_entry (uint64_t intno) |
| CPU_INTR | get_idt_entry (uint64_t intno) |
| std::unique_ptr< std::map< REG, RVAL > > | init_thread_regs (ADDR pc, ADDR sp) |
| virtual void | prerun_hook (ADDR &start) |
| template<typename T > | |
| T | read_reg (REG reg) |
| template<typename T > | |
| T | read_reg (std::string reg_name) |
| uint64_t | read_arch_reg (REG reg) |
| template<typename T > | |
| void | write_reg (REG reg, T val) |
| template<typename T > | |
| void | write_reg (std::string reg_name, T val) |
| void | write_arch_reg (REG reg, uint64_t val) |
Private Member Functions | |
| void | enable_lse () |
| void | enable_vfp () |
| void | setup () override |
Static Private Member Functions | |
| static void | int_hook (std::shared_ptr< arion::Arion > arion, uint32_t intno, void *user_data) |
Additional Inherited Members | |
Static Public Member Functions inherited from arion::ArchManager | |
| static std::unique_ptr< ArchManager > | initialize (std::weak_ptr< Arion > arion, CPU_ARCH arch, PLATFORM platform=PLATFORM::UNKNOWN_PLATFORM) |
| static int | get_signal_from_intr (CPU_INTR intr) |
Protected Member Functions inherited from arion::ArchManager | |
| ArchManager (std::shared_ptr< ARCH_ATTRIBUTES > attrs, std::map< std::string, REG > arch_regs, std::map< REG, uint8_t > arch_regs_sz, std::vector< REG > ctxt_regs, std::map< uint64_t, CPU_INTR > cpu_idt, bool hooks_intr) | |
Protected Attributes inherited from arion::ArchManager | |
| std::weak_ptr< Arion > | arion |
| The Arion instanced associated to this instance. | |
| uc_engine * | uc |
| The Unicorn engine associated with this instance. | |
| std::vector< ks_engine * > | ks |
| The Keystone engine associated with this instance. | |
| std::vector< csh * > | cs |
| The Capstone engine associated with this instance. | |
| std::shared_ptr< ARCH_ATTRIBUTES > | attrs |
| Multiple architecture specific attributes, grouped in a structure for genericity purpose. | |
| std::map< std::string, REG > | arch_regs |
| Unicorn registers by their name. | |
| std::map< REG, uint8_t > | arch_regs_sz |
| Unicorn registers sizes. | |
| std::vector< REG > | ctxt_regs |
| Unicorn registers making up the context to save and restore. | |
| std::map< uint64_t, CPU_INTR > | cpu_idt |
| Interrupt Descriptor Table for the CPU. | |
| bool | hooks_intr |
| True if the ArchManager subclass uses hook_intr to intercept syscalls. | |
A class responsible for performing architecture specific operations in case of an ARM64 chip emulation.
|
inline |
Builder for ArchManagerARM64 instances.
|
overridevirtual |
Retrieves the Capstone engine associated with this instance.
Implements arion::ArchManager.
|
overridevirtual |
Retrieves the Keystone engine associated with this instance.
Implements arion::ArchManager.
|
overridevirtual |
Retrieves the current Thread Local Storage (TLS) address from the emulation context.
Implements arion::ArchManager.
|
private |
Enables the Large System Extensions (LSE) unit of the ARM emulated chip.
|
private |
Enables the Vector Floating Point (VFP) unit of the ARM64 emulated chip.
|
staticprivate |
Interrupt hook used to detect syscalls.
| [in] | arion | The Arion instance responsible for the interrupt. |
| [in] | intno | The interrupt number. |
| [in] | user_data | Additional user data. |
|
overridevirtual |
Defines a Thread Local Storage (TLS) address to apply to the emulation.
| [in] | new_tls | The new TLS address. |
Implements arion::ArchManager.
|
overrideprivatevirtual |
Prepares the ArchManagerARM64 for emulation.
Implements arion::ArchManager.