Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int top = 32, base = 12;
- typedef DWORD _DWORD;
- typedef int(__stdcall *rLuaS_newlstr)(int RL, const char *str, size_t l);
- rLuaS_newlstr r_luaS_newlstr = (rLuaS_newlstr)x(0x7740E0); // a
- union r_Value
- {
- int b;
- double n;
- void* p;
- void* gc;
- };
- struct r_TValue
- {
- r_Value value;
- int tt;
- };
- r_TValue *rbxx_index2adr(INT rbx_L, INT idx) {
- // I'll partially copy IDA pseudocode LOL !!!!!
- int *result;
- int v3;
- const char rbx_luaO_nilobject[] = { 0, 0, 0, 0 };
- if (idx <= 0)
- {
- if (idx <= -10000)
- {
- switch (idx)
- {
- case -10002:
- result = (int *)(rbx_L + 64);
- break;
- case -10001:
- result = (int *)(rbx_L + 80);
- *result = *(_DWORD *)(***(_DWORD ***)(rbx_L + 28) + base);
- result[2] = 7;
- break;
- case -10000:
- result = (int *)((*(_DWORD *)(rbx_L + 20) ^ (rbx_L + 20)) + 104);
- break;
- default:
- v3 = ***(_DWORD ***)(rbx_L + 28);
- if (-10002 - idx > *(unsigned __int8 *)(v3 + 7))
- result = (int *)&rbx_luaO_nilobject;
- else
- result = (int *)(v3 + 16 * (-10002 - idx) + 8);
- break;
- }
- }
- else
- {
- result = (int *)(*(_DWORD *)(rbx_L + top) + 16 * idx);
- }
- }
- else
- {
- result = (int *)&rbx_luaO_nilobject;
- if ((unsigned int)(16 * idx + *(_DWORD *)(rbx_L + base) - 16) < *(_DWORD *)(rbx_L + 32))
- result = (int *)(16 * idx + *(_DWORD *)(rbx_L + base) - 16);
- }
- return (r_TValue *)result;
- }
- INT *rbx_index2adr(INT rbx_L, INT idx) {
- // I'll partially copy IDA pseudocode LOL !!!!!
- int *result;
- int v3;
- const char rbx_luaO_nilobject[] = { 0, 0, 0, 0 };
- if (idx <= 0)
- {
- if (idx <= -10000)
- {
- switch (idx)
- {
- case -10002:
- result = (int *)(rbx_L + 64);
- break;
- case -10001:
- result = (int *)(rbx_L + 80);
- *result = *(_DWORD *)(***(_DWORD ***)(rbx_L + 28) + 12);
- result[2] = 7;
- break;
- case -10000:
- result = (int *)((*(_DWORD *)(rbx_L + 20) ^ (rbx_L + 20)) + 104);
- break;
- default:
- v3 = ***(_DWORD ***)(rbx_L + 28);
- if (-10002 - idx > *(unsigned __int8 *)(v3 + 7))
- result = (int *)&rbx_luaO_nilobject;
- else
- result = (int *)(v3 + 16 * (-10002 - idx) + 8);
- break;
- }
- }
- else
- {
- result = (int *)(*(_DWORD *)(rbx_L + top) + 16 * idx);
- }
- }
- else
- {
- result = (int *)&rbx_luaO_nilobject;
- if ((unsigned int)(16 * idx + *(_DWORD *)(rbx_L + base) - 16) < *(_DWORD *)(rbx_L + 32))
- result = (int *)(16 * idx + *(_DWORD *)(rbx_L + base) - 16);
- }
- return result;
- }
- void r_lua_pushnil(DWORD a1) {
- *(_DWORD *)(*(_DWORD *)(a1 + top) + 8) = 0;
- *(_DWORD *)(a1 + top) += 16;
- }
- void r_lua_pushboolean(DWORD a1, int a2) {
- _DWORD *v2;
- v2 = *(_DWORD **)(a1 + top);
- *v2 = a2 != 0;
- v2[2] = 3;
- *(_DWORD *)(a1 + top) += 16;
- }
- void r_lua_pushstring(int rState, const char *s) {
- int v3 = *(DWORD *)(rState + top);
- *(DWORD *)v3 = r_luaS_newlstr(rState, s, strlen(s));
- *(DWORD *)(v3 + 8) = R_LUA_TSTRING;
- *(DWORD *)(rState + top) += 16;
- }
- void r_lua_settop(int a1, int a2) {
- int i;
- if (a2 < 0)
- {
- *(_DWORD *)(a1 + top) += 16 * a2 + 16;
- }
- else
- {
- for (i = 16 * a2; *(_DWORD *)(a1 + top) < (unsigned int)(i + *(_DWORD *)(a1 + base)); *(_DWORD *)(a1 + top) += 16)
- *(_DWORD *)(*(_DWORD *)(a1 + top) + 8) = 0;
- *(_DWORD *)(a1 + top) = i + *(_DWORD *)(a1 + base);
- }
- }
- void r_lua_pushvalue(DWORD a1, int a2)
- {
- r_TValue *p = rbxx_index2adr(a1, a2);
- int v3 = *(DWORD *)(a1 + top);
- *(DWORD *)v3 = *(DWORD *)p;
- *(DWORD *)(v3 + 4) = *(DWORD *)(p + 4);
- *(DWORD *)(v3 + 8) = p->tt;
- *(DWORD *)(a1 + top) += 16;
- }
- inline int r_lua_toboolean(int rState, int idx) {
- return rbxx_index2adr(rState, idx)->value.b;
- }
- inline int r_lua_type(int rState, int idx) {
- return rbxx_index2adr(rState, idx)->tt;
- }
- int rxor = x(0x1A4CBD0); // updated
- inline int r_lua_tonumber(int rState, int idx) {
- PVOID OldNumber = &rbxx_index2adr(rState, idx)->value.n;
- double NewNumber;
- __asm {
- mov edx, OldNumber
- mov eax, rxor
- movsd xmm1, qword ptr[edx]
- xorpd xmm1, [eax]
- movsd NewNumber, xmm1
- }
- return NewNumber;
- }
- void r_lua_pushlightuserdata(DWORD a1, void* fn)
- {
- r_TValue* top = *(r_TValue**)(a1 + top);
- top->value.p = fn;
- top->tt = 1;
- *(DWORD*)(a1 + 32) += 16;
- }
- INT r_lua_touserdata(INT rbx_L, signed int idx) {
- INT result;
- INT* o = rbx_index2adr(rbx_L, idx);
- if (o[2] == 1)
- {
- result = *o;
- }
- else if (o[2] == 8)
- {
- result = *o + 24;
- }
- else
- {
- result = NULL;
- }
- return result;
- }
- int r_lua_gettop(DWORD a1)
- {
- return (*(_DWORD *)(a1 + top) - *(_DWORD *)(a1 + base)) >> 4;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement