Subversion Repositories Kolibri OS

Rev

Rev 668 | Rev 740 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
659 serge 1
 
2
3
 
4
           locals
5
             image  dd ?
6
           endl
7
8
 
9
           test eax, eax
10
           jz .fail
11
12
 
13
14
 
15
16
 
17
           test eax, eax
18
           jz .cleanup
19
20
 
21
           ret
22
.cleanup:
23
           stdcall kernel_free,[image]
24
.fail:
25
           xor eax, eax
26
           ret
27
endp
28
29
 
30
 
31
map_PE:                    ;stdcall base:dword, image:dword
662 serge 32
           cld
659 serge 33
           push    ebp
34
           push    edi
35
           push    esi
36
           push    ebx
37
           sub     esp, 44
668 serge 38
659 serge 39
 
668 serge 40
           mov     ebx, [esp+64]
41
           mov     edx, ebp
42
           mov     esi, ebp
43
           add     edx, [ebp+60]
44
           mov     edi, ebx
45
           mov     [esp+32], edx
46
47
 
48
           shr     ecx, 2
49
           rep     movsd
50
51
 
659 serge 52
           mov     dword [esp+36], 0
668 serge 53
           mov     [esp+28], eax
54
           jmp     .L6
659 serge 55
.L7:
56
           mov     eax, [edx+264]
57
           test    eax, eax
668 serge 58
           je      .L8
59
60
 
61
           mov     edi, ebx
62
           add     esi, [edx+268]
659 serge 63
           mov     ecx, eax
64
           add     edi, [edx+260]
668 serge 65
659 serge 66
 
668 serge 67
           rep     movsd
68
.L8:
69
           mov     ecx, [edx+256]
659 serge 70
           add     ecx, 4095
668 serge 71
           and     ecx, -4096
72
           cmp     ecx, eax
659 serge 73
           jbe     .L10
668 serge 74
75
 
659 serge 76
           add     eax, [edx+260]
668 serge 77
           lea     edi, [eax+ebx]
78
659 serge 79
 
668 serge 80
           rep     stosb
81
.L10:
82
           inc     dword [esp+36]
83
           add     edx, 40
659 serge 84
.L6:
85
           mov     esi, [esp+28]
668 serge 86
           cmp     [esp+36], esi
87
           jne     .L7
659 serge 88
89
 
668 serge 90
           cmp     dword [edi+164], 0
91
           je      .L13
92
659 serge 93
 
668 serge 94
           mov     edi, ebx
659 serge 95
           mov     ecx, ebx
96
           sub     edi, [eax+52]
668 serge 97
           add     ecx, [eax+160]
98
99
 
100
           shr     edx, 16
101
           mov     [esp+20], edx
102
           jmp     .L15
103
.L16:
104
           lea     esi, [eax-8]
659 serge 105
           xor     ebp, ebp
106
           shr     esi, 1
668 serge 107
           jmp     .L17
108
.L18:
109
           movzx   eax, word [ecx+8+ebp*2]
659 serge 110
           mov     edx, eax
111
           shr     eax, 12
112
           and     edx, 4095
113
           add     edx, [ecx]
114
           cmp     ax, 2
115
           je      .L21
668 serge 116
659 serge 117
 
118
           je      .L22
668 serge 119
659 serge 120
 
121
           jne     .L19
668 serge 122
659 serge 123
 
668 serge 124
           add     [edx+ebx], ax
125
.L21:
126
           add     [edx+ebx], di
127
.L22:
128
           add     [edx+ebx], edi
129
.L19:
659 serge 130
           inc     ebp
668 serge 131
.L17:
659 serge 132
           cmp     ebp, esi
133
           jne     .L18
668 serge 134
135
 
659 serge 136
.L15:
668 serge 137
           mov     eax, [ecx+4]
659 serge 138
           test    eax, eax
139
           jne     .L16
668 serge 140
.L13:
141
           mov     edx, [esp+32]
142
           cmp     dword [edx+132], 0
659 serge 143
           je      .L24
668 serge 144
659 serge 145
 
146
           add     eax, [edx+128]
147
           lea     esi, [eax+20]
148
.L26:
668 serge 149
           cmp     dword [esi-16], 0
659 serge 150
           jne     .L27
668 serge 151
659 serge 152
 
153
           je      .L24
668 serge 154
.L27:
155
           mov     ecx, [esi-20]
659 serge 156
           mov     ebp, ebx
157
           add     ebp,  [esi-4]
668 serge 158
           add     ecx, ebx
659 serge 159
           mov     [esp+40], ecx
668 serge 160
.L29:
161
           mov     edi, [esp+40]
162
           mov     eax, [edi]
163
           test    eax, eax
659 serge 164
           je      .L30
668 serge 165
659 serge 166
 
167
           js      .L30
668 serge 168
659 serge 169
 
170
           mov     edi, kernel_export
171
           mov     [ebp], dword -1
668 serge 172
           mov     [esp+24], eax
173
.L33:
174
           push    ecx
659 serge 175
           push    16
176
           push    dword [edi]
177
           push    dword [esp+36]
668 serge 178
           call    strncmp
659 serge 179
           pop     edx
180
           test    eax, eax
181
           jne     .L34
668 serge 182
           mov     eax, [edi+4]
659 serge 183
           mov     [ebp], eax
184
           jmp     .L36
668 serge 185
.L34:
186
           add     edi, 8
659 serge 187
           cmp     dword [edi], 0
188
           jne     .L33
668 serge 189
.L36:
190
           add     dword [esp+40], 4
191
           add     ebp, 4
659 serge 192
           jmp     .L29
668 serge 193
.L30:
194
           add     esi, 20
659 serge 195
           jmp     .L26
668 serge 196
.L24:
197
           mov     eax, [esp+32]
198
           add     ebx, [eax+40]
199
           add     esp, 44
200
           mov     eax, ebx
659 serge 201
           pop     ebx
202
           pop     esi
203
           pop     edi
204
           pop     ebp
205
           ret     8
668 serge 206