forked from KolibriOS/kolibrios
57 lines
973 B
NASM
57 lines
973 B
NASM
CATCH_NULL_CALL = 0
|
|
|
|
format ELF
|
|
section '.text' executable
|
|
public start
|
|
EXTRN _edata
|
|
EXTRN ___menuet__app_param_area
|
|
EXTRN ___menuet__app_path_area
|
|
EXTRN ___crt1_startup
|
|
start:
|
|
public ___menuet__app_header
|
|
public ___menuet__memsize
|
|
___menuet__app_header:
|
|
db 'MENUET01'
|
|
dd 0x01
|
|
if CATCH_NULL_CALL
|
|
dd do_start
|
|
else
|
|
dd ___crt1_startup
|
|
end if
|
|
dd _edata
|
|
___menuet__memsize:
|
|
dd 0x800000
|
|
dd app_stack
|
|
dd ___menuet__app_param_area
|
|
dd ___menuet__app_path_area
|
|
|
|
if CATCH_NULL_CALL
|
|
do_start:
|
|
mov byte [0], 0xE9
|
|
mov dword [1], _libc_null_call-5
|
|
call ___crt1_startup
|
|
; Handle exit if __crt1_startup returns (shouldn't happen)
|
|
mov eax,-1
|
|
int 0x40
|
|
end if
|
|
|
|
if CATCH_NULL_CALL
|
|
EXTRN ___libc_null_call
|
|
|
|
_libc_null_call:
|
|
push eax
|
|
push ebx
|
|
push ecx
|
|
push edx
|
|
push esi
|
|
push edi
|
|
push ebp
|
|
call ___libc_null_call
|
|
mov eax,-1
|
|
int 0x40
|
|
end if
|
|
|
|
section '.bss' writeable
|
|
rd 0x20000
|
|
app_stack:
|