Subversion Repositories Kolibri OS

Rev

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");