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

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

#include <arch_x86.hpp>

Inheritance diagram for arion_x86::ArchManagerX86:
arion::ArchManager arion_lnx_x86::ArchManagerLinuxX86

Public Member Functions

 ArchManagerX86 ()
 
uint16_t new_tls (arion::ADDR udesc_addr)
 
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 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< 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 chip emulation.

Constructor & Destructor Documentation

◆ ArchManagerX86()

arion_x86::ArchManagerX86::ArchManagerX86 ( )
inline

Builder for ArchManagerX86 instances.

Member Function Documentation

◆ curr_cs()

csh * arion_x86::ArchManagerX86::curr_cs ( )
overridevirtual

Retrieves the Capstone engine associated with this instance.

Returns
The Capstone engine.

Implements arion::ArchManager.

◆ curr_ks()

ks_engine * arion_x86::ArchManagerX86::curr_ks ( )
overridevirtual

Retrieves the Keystone engine associated with this instance.

Returns
The Keystone engine.

Implements arion::ArchManager.

◆ dump_tls()

arion::ADDR arion_x86::ArchManagerX86::dump_tls ( )
overridevirtual

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

Returns
The TLS address.

Implements arion::ArchManager.

◆ int_hook()

static void arion_x86::ArchManagerX86::int_hook ( std::shared_ptr< arion::Arion arion,
uint32_t  intno,
void *  user_data 
)
staticprivate

Interrupt hook used to detect syscalls.

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

◆ load_tls()

void arion_x86::ArchManagerX86::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.

◆ new_tls()

uint16_t arion_x86::ArchManagerX86::new_tls ( arion::ADDR  udesc_addr)

Associates a new in-memory Thread Local Storage (TLS) to the Global Descriptor Table (GDT) like in the syscall new_tls.

Parameters
[in]udesc_addrAddress of the new TLS.
Returns
Selector for the new GDT entry.

◆ setup()

void arion_x86::ArchManagerX86::setup ( )
overrideprivatevirtual

Prepares the ArchManagerX86 for emulation.

Implements arion::ArchManager.


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