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

Classes

struct  UserCallInfo

Enumerations

enum class  UserRegister : 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  Register : uint64_t {
  None , AL = UserRegister::EAX , AX = UserRegister::EAX , EAX = UserRegister::EAX ,
  CL = UserRegister::ECX , CX = UserRegister::ECX , ECX = UserRegister::ECX , DL = UserRegister::EDX ,
  DX = UserRegister::EDX , EDX = UserRegister::EDX , BL = UserRegister::EBX , BX = UserRegister::EBX ,
  EBX = UserRegister::EBX , SPL = UserRegister::ESP , SP = UserRegister::ESP , ESP = UserRegister::ESP ,
  BPL = UserRegister::EBP , BP = UserRegister::EBP , EBP = UserRegister::EBP , SIL = UserRegister::ESI ,
  SI = UserRegister::ESI , ESI = UserRegister::ESI , DIL = UserRegister::EDI , DI = UserRegister::EDI ,
  EDI = UserRegister::EDI , ST0 = UserRegister::ST0 , ST1 = UserRegister::ST1 , ST2 = UserRegister::ST2 ,
  ST3 = UserRegister::ST3 , ST4 = UserRegister::ST4 , ST5 = UserRegister::ST5 , ST6 = UserRegister::ST6 ,
  ST7 = UserRegister::ST7 , XMM0 = UserRegister::XMM0 , XMM1 = UserRegister::XMM1 , XMM2 = UserRegister::XMM2 ,
  XMM3 = UserRegister::XMM3 , XMM4 = UserRegister::XMM4 , XMM5 = UserRegister::XMM5 , XMM6 = UserRegister::XMM6 ,
  XMM7 = UserRegister::XMM7 , Count
}
enum class  UserRegisterFamily : uint64_t { None , GPR = UserRegister::EAX , FPU = UserRegister::ST0 , SSE = UserRegister::XMM0 }

Functions

void * GetPostHookAddress (void *in_pHookStart)
UserRegisterFamily GetRegisterFamily (UserRegister in_register)
int GetRegisterID (UserRegister in_register)
void * EmitUserTrampoline (const UserCallInfo &in_rInfo, const size_t in_address, bool in_isToOriginal=false)

Enumeration Type Documentation

◆ Register

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

◆ UserRegister

enum class hedgedev::csl::hook::UserRegister : 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 

◆ UserRegisterFamily

enum class hedgedev::csl::hook::UserRegisterFamily : uint64_t
strong
Enumerator
None  
GPR UserRegister::EAX 
FPU UserRegister::ST0 
SSE UserRegister::XMM0 

Function Documentation

◆ EmitUserTrampoline()

void * hedgedev::csl::hook::EmitUserTrampoline ( const UserCallInfo & in_rInfo,
const size_t in_address,
bool in_isToOriginal = 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_rInfoThe info about the hook.
in_addressThe address of the __cdecl function to trampoline to.
in_isToOriginalDetermines whether this trampoline is going back to the original function.
Returns
A pointer to the trampoline that was emitted.

◆ GetPostHookAddress()

void * hedgedev::csl::hook::GetPostHookAddress ( void * in_pHookStart)
inline

◆ GetRegisterFamily()

UserRegisterFamily hedgedev::csl::hook::GetRegisterFamily ( UserRegister in_register)
inline

Gets the family a register belongs to.

Parameters
in_registerThe register to check.

◆ GetRegisterID()

int hedgedev::csl::hook::GetRegisterID ( UserRegister in_register)
inline

Gets the ID of a register.

Parameters
in_registerThe register to get the ID for.