103 lines
1.5 KiB
NASM
103 lines
1.5 KiB
NASM
|
format ELF
|
||
|
|
||
|
section '.text' executable
|
||
|
|
||
|
public start_
|
||
|
|
||
|
extrn main
|
||
|
|
||
|
buf_len = 0x400
|
||
|
max_parameters=0x20
|
||
|
|
||
|
start_:
|
||
|
db 'MENUET01' ; 1. Magic number (8 bytes)
|
||
|
dd 0x01 ; 2. Version of executable file
|
||
|
dd start__ ; 3. Start address
|
||
|
dd 0x0 ; 4. Size of image
|
||
|
dd 0x100000 ; 5. Size of needed memory
|
||
|
dd 0x100000 ; 6. Pointer to stack
|
||
|
hparams dd params ; 7. Pointer to program arguments
|
||
|
hpath dd path ; 8. Pointer to program path
|
||
|
|
||
|
start__:
|
||
|
|
||
|
;init heap of memory
|
||
|
mov eax,68
|
||
|
mov ebx,11
|
||
|
int 0x40
|
||
|
|
||
|
mov ebx,path
|
||
|
mov ecx,dword buf_len
|
||
|
add ebx,ecx
|
||
|
|
||
|
next_simbol_check:
|
||
|
xor eax,eax
|
||
|
mov al,[ebx]
|
||
|
cmp al,'/'
|
||
|
je simbol_fined
|
||
|
dec ebx
|
||
|
dec ecx
|
||
|
jnz next_simbol_check
|
||
|
|
||
|
simbol_fined:
|
||
|
inc ebx
|
||
|
|
||
|
mov [argc],dword 1
|
||
|
mov edx,argv
|
||
|
mov [edx],ebx ;argument number 0 - program name
|
||
|
|
||
|
cmp [params],byte 0
|
||
|
je exit_find_params
|
||
|
|
||
|
mov [argc],dword 2
|
||
|
mov ebx,params
|
||
|
add edx,4
|
||
|
mov [edx],ebx
|
||
|
|
||
|
next_symbol_parse:
|
||
|
xor eax,eax
|
||
|
mov al,[ebx]
|
||
|
test al,al
|
||
|
jz exit_find_params
|
||
|
cmp al,' '
|
||
|
je save_param
|
||
|
|
||
|
inc ebx
|
||
|
jmp next_symbol_parse
|
||
|
save_param:
|
||
|
|
||
|
mov [ebx],byte 0
|
||
|
inc ebx
|
||
|
add edx,4
|
||
|
mov [edx],ebx
|
||
|
inc [argc]
|
||
|
|
||
|
cmp [argc],max_parameters
|
||
|
jae exit_find_params
|
||
|
|
||
|
jmp next_symbol_parse
|
||
|
|
||
|
exit_find_params:
|
||
|
|
||
|
push argv
|
||
|
push [argc]
|
||
|
|
||
|
call main
|
||
|
exit:
|
||
|
|
||
|
xor eax,eax
|
||
|
dec eax
|
||
|
int 0x40
|
||
|
dd -1
|
||
|
crash:
|
||
|
jmp exit
|
||
|
|
||
|
public params as '__argv'
|
||
|
public path as '__path'
|
||
|
|
||
|
section '.bss'
|
||
|
argc rd 1
|
||
|
argv rd max_parameters
|
||
|
path rb buf_len
|
||
|
params rb buf_len
|