All pastes #488819 Raw Edit

Chao7

public text v1 · immutable
·published 2007-05-15 05:52 UTC
rendered paste body

[BITS 32]
[CPU PRESCOTT]
xrLUA_ISZ          equ 0x005CC104
szluaopen_base     equ 0x005C9110
szluaopen_package  equ 0x005C911F
szluaopen_table    equ 0x005C9131
szluaopen_io       equ 0x005C9141
szluaopen_os       equ 0x005C914E
szluaopen_string   equ 0x005C915B
szluaopen_math     equ 0x005C916C
szluaopen_debug    equ 0x005C917B
szluaopen_jit      equ 0x005C918B
szluaopen_coco     equ 0x005C9199
szlua_pushcclosure equ 0x005C91A8
szlua_pushstring   equ 0x005C91BB
szlua_call         equ 0x005C91CC

xrLUA_IAT          equ 0x005CC1D5
luaopen_base       equ xrLUA_IAT + ( 4 *  0 ) ; 0x005C91D5
luaopen_package    equ xrLUA_IAT + ( 4 *  1 ) ; 0x005C91D9
luaopen_table      equ xrLUA_IAT + ( 4 *  2 ) ; 0x005C91DD
luaopen_io         equ xrLUA_IAT + ( 4 *  3 ) ; 0x005C91E1
luaopen_os         equ xrLUA_IAT + ( 4 *  4 ) ; 0x005C91E5
luaopen_string     equ xrLUA_IAT + ( 4 *  5 ) ; 0x005C91E9
luaopen_math       equ xrLUA_IAT + ( 4 *  6 ) ; 0x005C91ED
luaopen_debug      equ xrLUA_IAT + ( 4 *  7 ) ; 0x005C91F2
luaopen_jit        equ xrLUA_IAT + ( 4 *  8 ) ; 0x005C91F6
luaopen_coco       equ xrLUA_IAT + ( 4 *  9 ) ; 0x005C91F9
lua_pushcclosure   equ xrLUA_IAT + ( 4 * 10 ) ; 0x005C91FD
lua_pushstring     equ xrLUA_IAT + ( 4 * 11 ) ; 0x005C9201
lua_call           equ xrLUA_IAT + ( 4 * 12 ) ; 0x005C9205

luahack_load:

; eax is state ptr
push ebx ; func ptr
push esi ; str ptr
push edx ; edx is relocated base image ptr, becomes state ptr
push edi ; call func

call luahack_eip_offset
luahack_eip_offset:
pop ecx
sub ecx, luahack_eip_offset ; get func base

mov ebx, edx
mov esi, edx
mov edi, edx

add ebx, luaopen_base
add esi, szluaopen_base
add edi, lua_pushcclosure

xchg edx, eax ; grab state ptr passed thru eax

; base
add esi, 12

add eax, luahack_postreg ; return to after luahack_reg hack
push eax

luahack_reg:
push ebx
push edx
call [ edi ]
add esp, 4*2
push esi
push edx
call [ edi + 4 ]
add esp, 4*2
push dword 0x00000000
push dword 0x00000001
push edx
call [ edi + 8 ]
add esp, 4*3
ret

luahack_postreg:

; package
add esi, 11
call near luahack_reg

; table
add esi, 18
call near luahack_reg

; io
add esi, 16
call near luahack_reg

; os
add esi, 13
call near luahack_reg

; string
add esi, 13
call near luahack_reg

; math
add esi, 17
call near luahack_reg

; debug
add esi, 15
call near luahack_reg

; jit
add esi, 16
call near luahack_reg

; coco
add esi, 14
call near luahack_reg

pop edi ; call func
pop edx ; edx is base reloc ptr, becomes state ptr - passed by eax
pop esi ; str ptr
pop ebx ; func ptr

xchg eax, edx ; return luaState pointer

ret