Spoiler:
Spoiler:
Code: Select all
ORG 0
BITS 32
; ------------------------------ ;
PATH_SIZE equ 1024
PARAMS_SIZE equ 256
STACK_SIZE equ 256
; ------------------------------ ;
MENUET01 db 'MENUET01'
version dd 1
program.start dd START
program.end dd END
program.memory dd END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
program.stack dd END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
program.params dd END + PATH_SIZE
program.path dd END
; ------------------------------ ;
START:
mov eax, 63
mov ebx, 1
xor ecx, ecx
mov esi, [32]
.next:
mov cl, [esi]
jecxz .done
int 64
inc esi
jmp .next
.done:
mov cl, 13
int 64
mov cl, 10
int 64
mov eax, -1
int 64
; ------------------------------ ;
END:
Spoiler:
Code: Select all
ORG 0
BITS 32
; ------------------------------- ;
PATH_SIZE equ 1024
PARAMS_SIZE equ 256
STACK_SIZE equ 256
; ------------------------------- ;
MENUET01 db 'MENUET01'
version dd 1
program.start dd START
program.end dd END
program.memory dd END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
program.stack dd END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
program.params dd END + PATH_SIZE
program.path dd END
; ------------------------------ ;
con_init dd 0
printf dd 0
con_exit dd 0
console dd 0
; ------------------------------ ;
sz_test db "Test",0
sz_con_init db "con_init",0
sz_con_printf db "con_printf",0
sz_con_exit db "con_exit",0
sz_console db "/sys/lib/console.obj",0
; ------------------------------ ;
START:
push sz_console
call LoadLibrary
mov ecx, eax
mov ebx, GetProcAddress
push ecx
push sz_con_init
call ebx
mov [con_init], eax
push ecx
push sz_con_printf
call ebx
mov [printf], eax
push ecx
push sz_con_exit
call ebx
mov [con_exit], eax
push sz_test
push -1
push -1
push -1
push -1
call [con_init]
push dword [32]
call [printf]
add esp, 4
push 0
call [con_exit]
mov eax, -1
int 64
; ------------------------------------- ;
LoadLibrary:
mov eax, 68
mov ebx, 19
mov ecx, [esp + 4]
int 64
ret 4
; ------------------------------------- ;
GetProcAddress:
mov edx, [esp + 8]
xor eax, eax
test edx, edx
jz .end
.next:
xor eax, eax
cmp [edx], dword 0
jz .end
mov esi, [edx]
mov edi, [esp + 4]
.next_:
lodsb
scasb
jne .fail
or al, al
jnz .next_
jmp .ok
.fail:
add edx, 8
jmp .next
.ok:
mov eax, [edx + 4]
.end:
ret 8
; ------------------------------------- ;
END: