Arion 1.0.2-alpha
A high-performance C++ framework for emulating executable binaries.
 
Loading...
Searching...
No Matches
arion_x86_64::ArchManagerX8664 Class Reference

A class responsible for performing architecture specific operations in case of an x86-64 chip emulation. More...

#include <arch_x86-64.hpp>

Inheritance diagram for arion_x86_64::ArchManagerX8664:
arion::ArchManager arion_lnx_x86_64::ArchManagerLinuxX8664

Public Member Functions

 ArchManagerX8664 ()
 
std::array< arion::BYTE, ARION_VSYSCALL_ENTRY_SZgen_vsyscall_entry (uint64_t syscall_no)
 
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_ATTRIBUTESget_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< REGget_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 >
read_reg (REG reg)
 
template<typename 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 setup () override
 

Static Private Member Functions

static void syscall_hook (std::shared_ptr< arion::Arion > arion, void *user_data)
 

Additional Inherited Members

- Static Public Member Functions inherited from arion::ArchManager
static std::unique_ptr< ArchManagerinitialize (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< Arionarion
 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_ATTRIBUTESattrs
 Multiple architecture specific attributes, grouped in a structure for genericity purpose.
 
std::map< std::string, REGarch_regs
 Unicorn registers by their name.
 
std::map< REG, uint8_t > arch_regs_sz
 Unicorn registers sizes.
 
std::vector< REGctxt_regs
 Unicorn registers making up the context to save and restore.
 
std::map< uint64_t, CPU_INTRcpu_idt
 Interrupt Descriptor Table for the CPU.
 
bool hooks_intr
 True if the ArchManager subclass uses hook_intr to intercept syscalls.
 

Detailed Description

A class responsible for performing architecture specific operations in case of an x86-64 chip emulation.

Constructor & Destructor Documentation

◆ ArchManagerX8664()

arion_x86_64::ArchManagerX8664::ArchManagerX8664 ( )
inline

Builder for ArchManagerX8664 instances.

Member Function Documentation

◆ curr_cs()

csh * arion_x86_64::ArchManagerX8664::curr_cs ( )
overridevirtual

Retrieves the Capstone engine associated with this instance.

Returns
The Capstone engine.

Implements arion::ArchManager.

◆ curr_ks()

ks_engine * arion_x86_64::ArchManagerX8664::curr_ks ( )
overridevirtual

Retrieves the Keystone engine associated with this instance.

Returns
The Keystone engine.

Implements arion::ArchManager.

◆ dump_tls()

arion::ADDR arion_x86_64::ArchManagerX8664::dump_tls ( )
overridevirtual

Retrieves the current Thread Local Storage (TLS) address from the emulation context.

Returns
The TLS address.

Implements arion::ArchManager.

◆ gen_vsyscall_entry()

std::array< arion::BYTE, ARION_VSYSCALL_ENTRY_SZ > arion_x86_64::ArchManagerX8664::gen_vsyscall_entry ( uint64_t  syscall_no)

Builds a syscall entry for the vsyscall segment.

Parameters
[in]syscall_noThe syscall number.
Returns
An array of bytes for the entry.

◆ load_tls()

void arion_x86_64::ArchManagerX8664::load_tls ( arion::ADDR  new_tls)
overridevirtual

Defines a Thread Local Storage (TLS) address to apply to the emulation.

Parameters
[in]new_tlsThe new TLS address.

Implements arion::ArchManager.

◆ setup()

void arion_x86_64::ArchManagerX8664::setup ( )
overrideprivatevirtual

Prepares the ArchManagerX8664 for emulation.

Implements arion::ArchManager.

◆ syscall_hook()

static void arion_x86_64::ArchManagerX8664::syscall_hook ( std::shared_ptr< arion::Arion arion,
void *  user_data 
)
staticprivate

A hook used to detect syscalls.

Parameters
[in]arionThe Arion instance responsible for the interrupt.
[in]user_dataAdditional user data.

The documentation for this class was generated from the following file: