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 |