Subversion Repositories Kolibri OS

Rev

Rev 662 | Rev 673 | 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
659 serge 69
 
668 serge 70
           mov     ecx, [edx+256]
659 serge 71
           add     ecx, 4095
668 serge 72
           and     ecx, -4096
73
           cmp     ecx, eax
659 serge 74
           jbe     .L10
668 serge 75
76
 
659 serge 77
           add     eax, [edx+260]
668 serge 78
           lea     edi, [eax+ebx]
79
659 serge 80
 
668 serge 81
           rep     stosb
82
659 serge 83
 
668 serge 84
           inc     dword [esp+36]
85
           add     edx, 40
659 serge 86
.L6:
87
           mov     esi, [esp+28]
668 serge 88
           cmp     [esp+36], esi
89
           jne     .L7
659 serge 90
91
 
668 serge 92
           cmp     dword [edi+164], 0
93
           je      .L13
94
659 serge 95
 
668 serge 96
           mov     edi, ebx
659 serge 97
           mov     ecx, ebx
98
           sub     edi, [eax+52]
668 serge 99
           add     ecx, [eax+160]
100
101
 
102
           shr     edx, 16
103
           mov     [esp+20], edx
104
           jmp     .L15
105
.L16:
106
           lea     esi, [eax-8]
659 serge 107
           xor     ebp, ebp
108
           shr     esi, 1
668 serge 109
           jmp     .L17
110
.L18:
111
           movzx   eax, word [ecx+8+ebp*2]
659 serge 112
           mov     edx, eax
113
           shr     eax, 12
114
           and     edx, 4095
115
           add     edx, [ecx]
116
           cmp     ax, 2
117
           je      .L21
668 serge 118
659 serge 119
 
120
           je      .L22
668 serge 121
659 serge 122
 
123
           jne     .L19
668 serge 124
659 serge 125
 
668 serge 126
           add     [edx+ebx], ax
127
.L21:
128
           add     [edx+ebx], di
129
.L22:
130
           add     [edx+ebx], edi
131
.L19:
659 serge 132
           inc     ebp
668 serge 133
.L17:
659 serge 134
           cmp     ebp, esi
135
           jne     .L18
668 serge 136
137
 
659 serge 138
.L15:
668 serge 139
           mov     eax, [ecx+4]
659 serge 140
           test    eax, eax
141
           jne     .L16
668 serge 142
.L13:
143
           mov     edx, [esp+32]
144
           cmp     dword [edx+132], 0
659 serge 145
           je      .L24
668 serge 146
659 serge 147
 
148
           add     eax, [edx+128]
149
           lea     esi, [eax+20]
150
.L26:
668 serge 151
           cmp     dword [esi-16], 0
659 serge 152
           jne     .L27
668 serge 153
659 serge 154
 
155
           je      .L24
668 serge 156
.L27:
157
           mov     ecx, [esi-20]
659 serge 158
           mov     ebp, ebx
159
           add     ebp,  [esi-4]
668 serge 160
           add     ecx, ebx
659 serge 161
           mov     [esp+40], ecx
668 serge 162
.L29:
163
           mov     edi, [esp+40]
164
           mov     eax, [edi]
165
           test    eax, eax
659 serge 166
           je      .L30
668 serge 167
659 serge 168
 
169
           js      .L30
668 serge 170
659 serge 171
 
172
           mov     edi, kernel_export
173
           mov     [ebp], dword -1
668 serge 174
           mov     [esp+24], eax
175
.L33:
176
           push    ecx
659 serge 177
           push    16
178
           push    dword [edi]
179
           push    dword [esp+36]
668 serge 180
           call    strncmp
659 serge 181
           pop     edx
182
           test    eax, eax
183
           jne     .L34
668 serge 184
           mov     eax, [edi+4]
659 serge 185
           mov     [ebp], eax
186
           jmp     .L36
668 serge 187
.L34:
188
           add     edi, 8
659 serge 189
           cmp     dword [edi], 0
190
           jne     .L33
668 serge 191
.L36:
192
           add     dword [esp+40], 4
193
           add     ebp, 4
659 serge 194
           jmp     .L29
668 serge 195
.L30:
196
           add     esi, 20
659 serge 197
           jmp     .L26
668 serge 198
.L24:
199
           mov     eax, [esp+32]
200
           add     ebx, [eax+40]
201
           add     esp, 44
202
           mov     eax, ebx
659 serge 203
           pop     ebx
204
           pop     esi
205
           pop     edi
206
           pop     ebp
207
           ret     8
668 serge 208