Rev 3809 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3809 | Rev 3915 | ||
---|---|---|---|
Line 37... | Line 37... | ||
37 | if(val == 0) |
37 | if(val == 0) |
38 | return 0; |
38 | return 0; |
39 | return (val & (val - 1)) == 0; |
39 | return (val & (val - 1)) == 0; |
40 | } |
40 | } |
Line 41... | Line 41... | ||
41 | 41 | ||
42 | int validate_pe(void *raw, size_t raw_size, int is_exec) |
42 | int validate_pe(void *raw, size_t raw_size) |
43 | { |
43 | { |
44 | PIMAGE_DOS_HEADER dos; |
44 | PIMAGE_DOS_HEADER dos; |
Line 45... | Line 45... | ||
45 | PIMAGE_NT_HEADERS32 nt; |
45 | PIMAGE_NT_HEADERS32 nt; |
Line 61... | Line 61... | ||
61 | return 0; |
61 | return 0; |
Line 62... | Line 62... | ||
62 | 62 | ||
63 | if(nt->FileHeader.Machine != IMAGE_FILE_MACHINE_I386) |
63 | if(nt->FileHeader.Machine != IMAGE_FILE_MACHINE_I386) |
Line 64... | Line -... | ||
64 | return 0; |
- | |
65 | - | ||
66 | if(is_exec && (nt->FileHeader.Characteristics & IMAGE_FILE_DLL)) |
- | |
67 | return 0; |
64 | return 0; |
68 | 65 | ||
Line 69... | Line -... | ||
69 | if(nt->OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR32_MAGIC) |
- | |
70 | return 0; |
- | |
71 | - | ||
72 | if( is_exec && nt->OptionalHeader.ImageBase != 0) |
66 | if(nt->OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR32_MAGIC) |
73 | return 0; |
67 | return 0; |
74 | 68 | ||
75 | if(nt->OptionalHeader.SectionAlignment < 4096) |
69 | if(nt->OptionalHeader.SectionAlignment < 4096) |
76 | { |
70 | { |
Line 212... | Line 206... | ||
212 | if(raw_img == NULL) |
206 | if(raw_img == NULL) |
213 | return NULL; |
207 | return NULL; |
Line 214... | Line 208... | ||
214 | 208 | ||
Line 215... | Line 209... | ||
215 | // printf("libc.dll raw %p, size %d\n", raw_img, raw_size); |
209 | // printf("libc.dll raw %p, size %d\n", raw_img, raw_size); |
216 | 210 | ||
217 | if(validate_pe(raw_img, raw_size, 0) != 0) |
211 | if(validate_pe(raw_img, raw_size) != 0) |
218 | { |
212 | { |
219 | // printf("invalide libc.dll\n"); |
213 | // printf("invalide libc.dll\n"); |