mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
The crash only happened when the game executable had the ASLR flag set, because only then the pointer value overflowed the int32 type due to my bad cast
126 lines
4.4 KiB
C++
126 lines
4.4 KiB
C++
//=============================================================================//
|
|
//
|
|
// Purpose: Squirrel API interface to engine
|
|
//
|
|
//=============================================================================//
|
|
|
|
#include "core/stdafx.h"
|
|
#include "squirrel/sqapi.h"
|
|
#include "squirrel/sqtype.h"
|
|
|
|
//---------------------------------------------------------------------------------
|
|
SQChar* sq_getstring(HSQUIRRELVM v, SQInteger i)
|
|
{
|
|
return *reinterpret_cast<char**>(*reinterpret_cast<int64_t*>(&v->_stackbase) + 0x10i64 * i + 0x8) + 0x40;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
SQInteger sq_getinteger(HSQUIRRELVM v, SQInteger i)
|
|
{
|
|
return *reinterpret_cast<SQInteger*>(*reinterpret_cast<int64_t*>(&v->_stackbase) + 0x10i64 * i + 0x8);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
SQRESULT sq_pushroottable(HSQUIRRELVM v)
|
|
{
|
|
return v_sq_pushroottable(v);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
void sq_pushbool(HSQUIRRELVM v, SQBool b)
|
|
{
|
|
v_sq_pushbool(v, b);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
void sq_pushstring(HSQUIRRELVM v, const SQChar* s, SQInteger len)
|
|
{
|
|
v_sq_pushstring(v, s, len);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
void sq_pushinteger(HSQUIRRELVM v, SQInteger val)
|
|
{
|
|
v_sq_pushinteger(v, val);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
void sq_pushconstant(HSQUIRRELVM v, const SQChar* name, SQInteger val)
|
|
{
|
|
v_sq_pushconstant(v, name, val);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
void sq_newarray(HSQUIRRELVM v, SQInteger size)
|
|
{
|
|
v_sq_newarray(v, size);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
void sq_newtable(HSQUIRRELVM v)
|
|
{
|
|
v_sq_newtable(v);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx)
|
|
{
|
|
return v_sq_newslot(v, idx);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
SQRESULT sq_arrayappend(HSQUIRRELVM v, SQInteger idx)
|
|
{
|
|
return v_sq_arrayappend(v, idx);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
SQRESULT sq_pushstructure(HSQUIRRELVM v, const SQChar* name, const SQChar* member, const SQChar* codeclass1, const SQChar* codeclass2)
|
|
{
|
|
return v_sq_pushstructure(v, name, member, codeclass1, codeclass2);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
SQRESULT sq_compilebuffer(HSQUIRRELVM v, SQBufState* bufferState, const SQChar* buffer, SQInteger level)
|
|
{
|
|
return v_sq_compilebuffer(v, bufferState, buffer, level);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
SQRESULT sq_call(HSQUIRRELVM v, SQInteger params, SQBool retval, SQBool raiseerror)
|
|
{
|
|
return v_sq_call(v, params, retval, raiseerror);
|
|
}
|
|
|
|
void SQAPI_Attach()
|
|
{
|
|
DetourAttach((LPVOID*)&v_sq_pushroottable, &sq_pushroottable);
|
|
DetourAttach((LPVOID*)&v_sq_pushbool, &sq_pushbool);
|
|
DetourAttach((LPVOID*)&v_sq_pushstring, &sq_pushstring);
|
|
DetourAttach((LPVOID*)&v_sq_pushinteger, &sq_pushinteger);
|
|
DetourAttach((LPVOID*)&v_sq_pushconstant, &sq_pushconstant);
|
|
DetourAttach((LPVOID*)&v_sq_newarray, &sq_newarray);
|
|
DetourAttach((LPVOID*)&v_sq_newtable, &sq_newtable);
|
|
DetourAttach((LPVOID*)&v_sq_newslot, &sq_newslot);
|
|
DetourAttach((LPVOID*)&v_sq_arrayappend, &sq_arrayappend);
|
|
DetourAttach((LPVOID*)&v_sq_pushstructure, &sq_pushstructure);
|
|
DetourAttach((LPVOID*)&v_sq_compilebuffer, &sq_compilebuffer);
|
|
DetourAttach((LPVOID*)&v_sq_call, &sq_call);
|
|
}
|
|
|
|
void SQAPI_Detach()
|
|
{
|
|
DetourDetach((LPVOID*)&v_sq_pushroottable, &sq_pushroottable);
|
|
DetourDetach((LPVOID*)&v_sq_pushbool, &sq_pushbool);
|
|
DetourDetach((LPVOID*)&v_sq_pushstring, &sq_pushstring);
|
|
DetourDetach((LPVOID*)&v_sq_pushinteger, &sq_pushinteger);
|
|
DetourDetach((LPVOID*)&v_sq_pushconstant, &sq_pushconstant);
|
|
DetourDetach((LPVOID*)&v_sq_newarray, &sq_newarray);
|
|
DetourDetach((LPVOID*)&v_sq_newtable, &sq_newtable);
|
|
DetourDetach((LPVOID*)&v_sq_newslot, &sq_newslot);
|
|
DetourDetach((LPVOID*)&v_sq_arrayappend, &sq_arrayappend);
|
|
DetourDetach((LPVOID*)&v_sq_pushstructure, &sq_pushstructure);
|
|
DetourDetach((LPVOID*)&v_sq_compilebuffer, &sq_compilebuffer);
|
|
DetourDetach((LPVOID*)&v_sq_call, &sq_call);
|
|
}
|