Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4349 Serge 1
 
2
{ .banner      dq ?
3
  .version     dd ?    ;+8
4
  .start       dd ?    ;+12
5
  .i_end       dd ?    ;+16
6
  .mem_size    dd ?    ;+20
7
  .stack_top   dd ?    ;+24
8
  .cmdline     dd ?    ;+28
9
  .path        dd ?    ;+32
10
}
11
12
 
13
  app_hdr APP_HEADER_02
14
end virtual
15
16
 
17
18
 
19
20
 
21
22
 
23
        dd szStart,    START
24
        dd szVersion,  0x00010001
25
        dd szExec,     exec
26
        dd 0
27
28
 
29
30
 
31
szVersion  db 'version',0
32
szExec     db 'exec',0
33
34
 
35
        xor eax, eax
36
        cmp [app_hdr.path], 0
37
        je  .ret
38
        not eax
39
.ret:
40
        mov [check], eax
41
        ret 4
42
43
 
44
exec:
45
        cmp [check], 0
46
        lea ebp, [esp+4]
47
        je  .fail
48
49
 
50
        test eax, eax
51
        jz .fail
52
53
 
54
        mov edx, [ebp+4]
55
        call validate_pe
56
        test eax, eax
57
        jz .fail
58
59
 
60
        mov ebx, [ebp]
61
        mov ecx, [ebx+60]
62
        mov ecx, [ecx+96+ebx]       ; app stack size
63
        add ecx, 4095
64
        and ecx, -4096
65
        mov ebx, 12
66
67
 
68
        test eax, eax
69
        jz .fail
70
71
 
72
        mov [fs:4], eax         ;stack base
73
        mov [fs:8], ecx         ;stack top
74
75
 
76
77
 
78
        mov eax, 9
79
        mov ebx, esp
80
        mov ecx, -1
81
        int 0x40
82
        mov eax, [ebx+30]
83
        mov [fs:0], eax         ; save pid
84
        add esp, 1024
85
86
 
87
        call create_image
88
        test eax, eax
89
        jz .fail
90
91
 
92
        mov  ebx, [ebx+40+eax]
93
        add  ebx, eax
94
        push ebp
95
        push EXPORTS
96
        push eax
97
        call ebx
98
99
 
100
101
 
102
        ret 4
103
104
 
105
106
 
107
        test    ecx, ecx
108
        je      .L2
109
        cmp     edx, 63
110
        jbe     .L2
111
        cmp     [ecx], word 23117
112
        je      .L10
113
.L2:
114
        xor     eax, eax
115
        ret
116
117
 
118
.L10:
119
        mov     eax, [ecx+60]
120
        test    eax, eax
121
        je      .L2
122
        add     ecx, eax
123
        jb      .L2
124
        cmp     [ecx], dword 17744
125
        jne     .L2
126
        cmp     [ecx+4], word 332
127
        jne     .L2
128
        test    [ecx+23], byte 32
129
        jne     .L2
130
        cmp     [ecx+24], word 267
131
        jne     .L2
132
        mov     eax, [ecx+56]
133
        cmp     eax, 4095
134
        ja      .L3
135
        cmp     eax, [ecx+60]
136
        jne     .L2
137
        test    eax, eax
138
        je      .L2
139
.L5:
140
        lea     edx, [eax-1]
141
        test    edx, eax
142
        jne     .L2
143
        mov     eax, [ecx+60]
144
        test    eax, eax
145
        je      .L2
146
        lea     edx, [eax-1]
147
        test    edx, eax
148
        jne     .L2
149
        xor     eax, eax
150
        cmp     [ecx+6], word 96
151
        setbe   al
152
        ret
153
.L3:
154
        cmp     eax, [ecx+60]
155
        jae     .L5
156
        jmp     .L2
157
158
 
159
create_image:
160
        push    ebp
161
        push    edi
162
        push    esi
163
        push    ebx
164
        sub     esp, 20
165
        mov     [esp+16], ecx
166
        mov     eax, [ecx+60]
167
        add     eax, ecx
168
        mov     [esp], eax
169
        mov     ecx, [eax+80]
170
        mov     ebx, 12
171
        mov     eax, 68
172
        int     0x40
173
        test    eax, eax
174
        je      .L16
175
176
 
177
        mov     ecx, [edx+84]
178
        mov     esi, [esp+16]
179
        mov     edi, eax
180
        shr     ecx, 2
181
        rep     movsd
182
        mov     cx, [edx+6]
183
        test    cx, cx
184
        je      .L17
185
        add     edx, 248
186
        movzx   ecx, cx
187
        lea     ebp, [ecx-1]
188
        xor     bl, bl
189
        jmp     .L19
190
191
 
192
.L31:
193
        add     edx, 40
194
        inc     ebx
195
.L19:
196
        mov     ecx, [edx+16]
197
        test    ecx, ecx
198
        je      .L18
199
        mov     esi, [edx+20]
200
        test    esi, esi
201
        je      .L18
202
        add     esi, [esp+16]
203
        mov     edi, [edx+12]
204
        add     edi, eax
205
206
 
207
        rep     movsd
208
209
 
210
        cmp     ebx, ebp
211
        jne     .L31
212
.L17:
213
        mov     edx, [esp]
214
        mov     ecx, [edx+164]
215
        test    ecx, ecx
216
        je      .L16
217
218
 
219
        sub     ebp, [edx+52]
220
        mov     ebx, [edx+160]
221
        add     ebx, eax
222
        mov     esi, [ebx+4]
223
        test    esi, esi
224
        je      .L16
225
226
 
227
        shr     edi, 16
228
        mov     [esp], di
229
230
 
231
.L26:
232
        lea     edi, [esi-8]
233
        shr     edi, 1
234
        je      .L20
235
        xor     ecx, ecx
236
        jmp     .L25
237
238
 
239
.L32:
240
        cmp     si, 3
241
        je      .L24
242
        dec     si
243
        jne     .L21
244
        mov     esi, [esp]
245
        add     [eax+edx], si
246
.L21:
247
        inc     ecx
248
        cmp     ecx, edi
249
        je      .L20
250
.L25:
251
        mov     si, [ebx+8+ecx*2]
252
        mov     edx, esi
253
        and     edx, 4095
254
        add     edx, [ebx]
255
        shr     si, 12
256
        cmp     si, 2
257
        jne     .L32
258
        add     [eax+edx], bp
259
        inc     ecx
260
        cmp     ecx, edi
261
        jne     .L25
262
.L20:
263
        add     ebx, [ebx+4]
264
        mov     esi, [ebx+4]
265
        test    esi, esi
266
        jne     .L26
267
.L16:
268
        add     esp, 20
269
        pop     ebx
270
        pop     esi
271
        pop     edi
272
        pop     ebp
273
        ret
274
275
 
276
.L24:
277
        add     [eax+edx], ebp
278
        jmp     .L21
279
280
 
281
 
282
my_libc:
283
        file '../libc.dll'
284