All pastes #488872 Raw Edit

Chao7

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

.686p
.mmx
.model flat

; Segment type: Pure code
seg000 segment byte public 'CODE' use32
assume cs:seg000
assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing

; eax = luaState
; edx = relocated image base

luahack_load proc near

000 53                      push    ebx
004 56                      push    esi
008 52                      push    edx
00C 57                      push    edi

010 E8 00 00 00 00          call    dword luahack_push_eip          ; push eip

                            luahack_push_eip:                       ; DATA XREF: luahack_load+4t
                                                                    ; luahack_load+Ao
014 59                      pop     ecx                             ; ecx = eip
010 83 E9 09                sub     ecx, offset luahack_push_eip    ; eax = code base

010 89 D3                   mov     ebx, edx                        ; base luaopen func on image
010 89 D6                   mov     esi, edx                        ; base sz on image
010 89 D7                   mov     edi, edx                        ; base lua func on image

010 81 C3 D5 C1 5C 00       add     ebx, 005CC1D5h                  ; luaopen_base
010 81 C6 10 91 5C 00       add     esi, 005C9110h                  ; sz "luaopen_base"
010 81 C7 FD C1 5C 00       add     edi, 005CC1FDh                  ; lua_pushcclosure

010 92                      xchg    eax, edx                        ; Exchange Register/Memory with Register

010 83 C6 0C                add     esi, 12                         ; sz ""

010 05 4A 00 00 00          add     eax, offset luahack_postreg     ; eax = luahack_postreg
010 50                      push    eax                             ; return pointer = eax

                            luahack_reg:                            ; CODE XREF: luahack_load+50p
                                                                    ; luahack_load+5Bp ...
014 53                      push    ebx                             ; ptr luaopen_*
018 52                      push    edx                             ; ptr luaStack
01C FF 17                   call    dword ptr [edi]                 ; lua_pushcclosure
01C 83 C4 08                add     esp, 2 * 4                      ; clear stack

014 56                      push    esi                             ; ptr sz
018 52                      push    edx                             ; ptr luaStack
01C FF 57 04                call    dword ptr [edi+4]               ; lua_pushstring
01C 83 C4 08                add     esp, 2 * 4                      ; clear stack

014 6A 00                   push    00000000h                       ; zero
018 6A 01                   push    00000001h                       ; one
01C 52                      push    edx                             ; ptr luaStack
020 FF 57 08                call    dword ptr [edi+8]               ; lua_call
020 83 C4 0C                add     esp, 3 * 4                      ; clear stack

014 C3                      retn                                    ; Return Near from Procedure

                            luahack_postreg:                        ; DATA XREF: luahack_load+29o

010 83 C6 0B                add     esi, 11                         ; sz "package"
010 83 C3 04                add     ebx, 4                          ; luaopen_package
010 E8 DA FF FF FF          call    luahack_reg                     ; Call Procedure

010 83 C6 12                add     esi, 18                         ; sz "table"
010 83 C3 04                add     ebx, 4                          ; luaopen_table
010 E8 CF FF FF FF          call    luahack_reg                     ; Call Procedure

010 83 C6 10                add     esi, 16                         ; sz "io"
010 83 C3 04                add     ebx, 4                          ; luaopen_io
010 E8 C4 FF FF FF          call    luahack_reg                     ; Call Procedure

010 83 C6 0D                add     esi, 13                         ; sz "os"
010 83 C3 04                add     ebx, 4                          ; luaopen_os
010 E8 B9 FF FF FF          call    luahack_reg                     ; Call Procedure

010 83 C6 0D                add     esi, 13                         ; sz "string"
010 83 C3 04                add     ebx, 4                          ; luaopen_string
010 E8 AE FF FF FF          call    luahack_reg                     ; Call Procedure

010 83 C6 11                add     esi, 17                         ; sz "math"
010 83 C3 04                add     ebx, 4                          ; luaopen_math
010 E8 A3 FF FF FF          call    luahack_reg                     ; Call Procedure

010 83 C6 0F                add     esi, 15                         ; sz "debug"
010 83 C3 04                add     ebx, 4                          ; luaopen_debug
010 E8 98 FF FF FF          call    luahack_reg                     ; Call Procedure

010 83 C6 10                add     esi, 16                         ; sz "jit"
010 83 C3 04                add     ebx, 4                          ; luaopen_jit
010 E8 8D FF FF FF          call    luahack_reg                     ; Call Procedure

010 83 C6 0E                add     esi, 14                         ; sz "coco"
010 83 C3 04                add     ebx, 4                          ; luaopen_coco
010 E8 82 FF FF FF          call    luahack_reg                     ; Call Procedure

010 92                      xchg    eax, edx                        ; eax = luaState

010 5F                      pop     edi
00C 5A                      pop     edx
008 5E                      pop     esi
004 5B                      pop     ebx

000 C3                      retn                                    ; Return Near from Procedure

luahack_load endp

seg000 ends

end