Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
696 andrew_pro 1
format ELF
2
 
3
section '.text' executable
4
 
5
public start_
6
 
7
extrn main
8
 
9
buf_len = 0x400
10
max_parameters=0x20
11
 
12
start_:
13
	db 'MENUET01'	; 1. Magic number (8 bytes)
14
	dd 0x01		; 2. Version of executable file
15
	dd start__	; 3. Start address
16
	dd 0x0		; 4. Size of image
17
	dd 0x100000	; 5. Size of needed memory
18
	dd 0x100000	; 6. Pointer to stack
19
hparams	dd params	; 7. Pointer to program arguments
20
hpath	dd path		; 8. Pointer to program path
21
 
22
	start__:
23
 
24
	;init heap of memory
25
	mov eax,68
26
	mov ebx,11
27
	int 0x40
28
 
29
	mov ebx,path
30
	mov ecx,dword buf_len
31
	add ebx,ecx
32
 
33
	next_simbol_check:
34
	xor eax,eax
35
	mov al,[ebx]
36
	cmp al,'/'
37
	je simbol_fined
38
	dec ebx
39
	dec ecx
40
	jnz next_simbol_check
41
 
42
	simbol_fined:
43
	inc ebx
44
 
45
	mov [argc],dword 1
46
	mov edx,argv
47
	mov [edx],ebx	;argument number 0 - program name
48
 
49
	cmp [params],byte 0
50
	je exit_find_params
51
 
52
	mov [argc],dword 2
53
	mov ebx,params
54
	add edx,4
55
	mov [edx],ebx
56
 
57
	next_symbol_parse:
58
		xor eax,eax
59
		mov al,[ebx]
60
		test al,al
61
		jz exit_find_params
62
		cmp al,' '
63
		je save_param
64
 
65
		inc ebx
66
	jmp next_symbol_parse
67
	save_param:
68
 
69
	mov [ebx],byte 0
70
	inc ebx
71
	add edx,4
72
	mov [edx],ebx
73
	inc [argc]
74
 
75
	cmp [argc],max_parameters
76
	jae exit_find_params
77
 
78
	jmp next_symbol_parse
79
 
80
	exit_find_params:
81
 
82
	push argv
83
	push [argc]
84
 
85
	call main
86
exit:
87
 
88
	xor  eax,eax
89
	dec  eax
90
	int  0x40
91
	dd   -1
92
crash:
93
	jmp  exit
94
 
95
public params as '__argv'
96
public path as '__path'
97
 
98
section '.bss'
99
argc     rd 1
100
argv     rd max_parameters
101
path     rb buf_len
102
params   rb buf_len