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 |