mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-12-30 23:14:12 +08:00
e666cb0e1b
1 rpcs3
90 lines
1.9 KiB
C++
90 lines
1.9 KiB
C++
#pragma once
|
|
#ifdef _WIN64
|
|
namespace RPCS3
|
|
{
|
|
class emu_arg{
|
|
hook_stack* stack;
|
|
public:
|
|
emu_arg(hook_stack* stack_):stack(stack_){};
|
|
uintptr_t operator [](int idx){
|
|
auto base=stack->rbx;
|
|
auto args=(uintptr_t*)(stack->rbp+0x18+8*3);
|
|
return base+args[idx];
|
|
}
|
|
};
|
|
}
|
|
namespace YUZU
|
|
{
|
|
class emu_arg{
|
|
hook_stack* stack;
|
|
public:
|
|
emu_arg(hook_stack* stack_):stack(stack_){};
|
|
uintptr_t operator [](int idx){
|
|
auto base=stack->r13;
|
|
auto args=(uintptr_t*)stack->r15;
|
|
return base+args[idx];
|
|
}
|
|
};
|
|
}
|
|
namespace VITA3K
|
|
{
|
|
class emu_addr{
|
|
hook_stack* stack;
|
|
DWORD addr;
|
|
public:
|
|
emu_addr(hook_stack* stack_,DWORD addr_):stack(stack_),addr(addr_){};
|
|
operator uintptr_t(){
|
|
auto base=stack->r13;
|
|
return base+addr;
|
|
}
|
|
operator DWORD*(){
|
|
return (DWORD*)(uintptr_t)*this;
|
|
}
|
|
};
|
|
class emu_arg{
|
|
hook_stack* stack;
|
|
public:
|
|
emu_arg(hook_stack* stack_):stack(stack_){};
|
|
uintptr_t operator [](int idx){
|
|
auto args=(uint32_t*)stack->r15;
|
|
return emu_addr(stack,args[idx]);
|
|
}
|
|
};
|
|
}
|
|
#endif
|
|
namespace PPSSPP{
|
|
inline DWORD x86_baseaddr;
|
|
class emu_addr{
|
|
hook_stack* stack;
|
|
DWORD addr;
|
|
public:
|
|
emu_addr(hook_stack* stack_,DWORD addr_):stack(stack_),addr(addr_){};
|
|
operator uintptr_t(){
|
|
#ifndef _WIN64
|
|
auto base=x86_baseaddr;
|
|
#else
|
|
auto base=stack->rbx;
|
|
#endif
|
|
return base+addr;
|
|
}
|
|
operator DWORD*(){
|
|
return (DWORD*)(uintptr_t)*this;
|
|
}
|
|
};
|
|
class emu_arg{
|
|
hook_stack* stack;
|
|
public:
|
|
|
|
emu_arg(hook_stack* stack_):stack(stack_){};
|
|
uintptr_t operator [](int idx){
|
|
#ifndef _WIN64
|
|
auto args=stack->ebp;
|
|
#else
|
|
auto args=stack->r14;
|
|
#endif
|
|
auto offR = -0x80;
|
|
auto offset = offR + 0x10 + idx * 4;
|
|
return (uintptr_t)emu_addr(stack,*(uint32_t*)(args+offset));
|
|
}
|
|
};
|
|
} |