CommonLib
Loading...
Searching...
No Matches
hedgedev::csl::hook Namespace Reference

Classes

struct  usercall_info

Enumerations

enum class  user_register : uint64_t {
  none , EAX , ECX , EDX ,
  EBX , ESP , EBP , ESI ,
  EDI , ST0 , ST1 , ST2 ,
  ST3 , ST4 , ST5 , ST6 ,
  ST7 , XMM0 , XMM1 , XMM2 ,
  XMM3 , XMM4 , XMM5 , XMM6 ,
  XMM7 , count
}
enum class  user_register_alias : uint64_t {
  none = user_register::none , AL = user_register::EAX , AX = user_register::EAX , EAX = user_register::EAX ,
  CL = user_register::ECX , CX = user_register::ECX , ECX = user_register::ECX , DL = user_register::EDX ,
  DX = user_register::EDX , EDX = user_register::EDX , BL = user_register::EBX , BX = user_register::EBX ,
  EBX = user_register::EBX , SPL = user_register::ESP , SP = user_register::ESP , ESP = user_register::ESP ,
  BPL = user_register::EBP , BP = user_register::EBP , EBP = user_register::EBP , SIL = user_register::ESI ,
  SI = user_register::ESI , ESI = user_register::ESI , DIL = user_register::EDI , DI = user_register::EDI ,
  EDI = user_register::EDI , ST0 = user_register::ST0 , ST1 = user_register::ST1 , ST2 = user_register::ST2 ,
  ST3 = user_register::ST3 , ST4 = user_register::ST4 , ST5 = user_register::ST5 , ST6 = user_register::ST6 ,
  ST7 = user_register::ST7 , XMM0 = user_register::XMM0 , XMM1 = user_register::XMM1 , XMM2 = user_register::XMM2 ,
  XMM3 = user_register::XMM3 , XMM4 = user_register::XMM4 , XMM5 = user_register::XMM5 , XMM6 = user_register::XMM6 ,
  XMM7 = user_register::XMM7
}
enum class  user_register_family : uint64_t { none , GPR = user_register::EAX , FPU = user_register::ST0 , SSE = user_register::XMM0 }

Functions

user_register_family get_register_family (user_register in_register)
int get_register_id (user_register in_register)
bool is_protected_register (user_register in_register)
void * emit_user_trampoline (const usercall_info &in_info, void *in_address, bool in_to_original=false)
void * _get_post_hook_address (void *in_hook)

Enumeration Type Documentation

◆ user_register

enum class hedgedev::csl::hook::user_register : uint64_t
strong

Registers used for __usercall/__userpurge calling conventions.

These registers have been ordered in an specific way that line up with register IDs used for encoding instructions.

Enumerator
none 
EAX 
ECX 
EDX 
EBX 
ESP 
EBP 
ESI 
EDI 
ST0 
ST1 
ST2 
ST3 
ST4 
ST5 
ST6 
ST7 
XMM0 
XMM1 
XMM2 
XMM3 
XMM4 
XMM5 
XMM6 
XMM7 
count 

◆ user_register_alias

enum class hedgedev::csl::hook::user_register_alias : uint64_t
strong
Enumerator
none user_register::none 
AL user_register::EAX 
AX user_register::EAX 
EAX user_register::EAX 
CL user_register::ECX 
CX user_register::ECX 
ECX user_register::ECX 
DL user_register::EDX 
DX user_register::EDX 
EDX user_register::EDX 
BL user_register::EBX 
BX user_register::EBX 
EBX user_register::EBX 
SPL user_register::ESP 
SP user_register::ESP 
ESP user_register::ESP 
BPL user_register::EBP 
BP user_register::EBP 
EBP user_register::EBP 
SIL user_register::ESI 
SI user_register::ESI 
ESI user_register::ESI 
DIL user_register::EDI 
DI user_register::EDI 
EDI user_register::EDI 
ST0 user_register::ST0 
ST1 user_register::ST1 
ST2 user_register::ST2 
ST3 user_register::ST3 
ST4 user_register::ST4 
ST5 user_register::ST5 
ST6 user_register::ST6 
ST7 user_register::ST7 
XMM0 user_register::XMM0 
XMM1 user_register::XMM1 
XMM2 user_register::XMM2 
XMM3 user_register::XMM3 
XMM4 user_register::XMM4 
XMM5 user_register::XMM5 
XMM6 user_register::XMM6 
XMM7 user_register::XMM7 

◆ user_register_family

enum class hedgedev::csl::hook::user_register_family : uint64_t
strong
Enumerator
none  
GPR user_register::EAX 
FPU user_register::ST0 
SSE user_register::XMM0 

Function Documentation

◆ _get_post_hook_address()

void * hedgedev::csl::hook::_get_post_hook_address ( void * in_hook)
inline

◆ emit_user_trampoline()

void * hedgedev::csl::hook::emit_user_trampoline ( const usercall_info & in_info,
void * in_address,
bool in_to_original = false )
inline

Emits a trampoline that forwards arguments from a function with custom calling convention to a __cdecl function in a hook defined with USER_HOOK.

Parameters
in_infoThe info about the hook.
in_addressThe address of the __cdecl function to trampoline to.
in_to_originalDetermines whether this trampoline is going back to the original function.
Returns
A pointer to the trampoline that was emitted.

◆ get_register_family()

user_register_family hedgedev::csl::hook::get_register_family ( user_register in_register)
inline

Gets the family a register belongs to.

Parameters
in_registerThe register to check.

◆ get_register_id()

int hedgedev::csl::hook::get_register_id ( user_register in_register)
inline

Gets the ID of a register.

Parameters
in_registerThe register to get the ID for.

◆ is_protected_register()

bool hedgedev::csl::hook::is_protected_register ( user_register in_register)
inline

Checks if a register is protected and should be restored after calling the original function.

Parameters
in_registerThe register to check.