Rev 890 | Rev 897 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
890 | serge | 1 | |
2 | #include |
||
3 | #include |
||
4 | #include |
||
5 | #include |
||
6 | #include |
||
7 | #include |
||
892 | serge | 8 | |
890 | serge | 9 | |
892 | serge | 10 | |
890 | serge | 11 | |
892 | serge | 12 | |
890 | serge | 13 | |
892 | serge | 14 | { |
890 | serge | 15 | char *p; |
892 | serge | 16 | unsigned char c; |
17 | |||
890 | serge | 18 | |
892 | serge | 19 | while( (c = *p) ) |
20 | { |
||
890 | serge | 21 | if( c >= 'a' && c <= 'z' ) |
892 | serge | 22 | *p = c - 'a' + 'A'; |
23 | ++p; |
||
24 | } |
||
25 | |||
890 | serge | 26 | |
892 | serge | 27 | } |
28 | |||
890 | serge | 29 | |
892 | serge | 30 | { |
890 | serge | 31 | PIMAGE_DOS_HEADER dos; |
892 | serge | 32 | PIMAGE_NT_HEADERS32 nt; |
33 | PIMAGE_EXPORT_DIRECTORY exp; |
||
34 | |||
890 | serge | 35 | |
892 | serge | 36 | nt = MakePtr( PIMAGE_NT_HEADERS32, dos, dos->e_lfanew); |
37 | exp = MakePtr(PIMAGE_EXPORT_DIRECTORY,LOAD_BASE, |
||
38 | nt->OptionalHeader.DataDirectory[0].VirtualAddress); |
||
39 | |||
890 | serge | 40 | |
892 | serge | 41 | |
890 | serge | 42 | |
892 | serge | 43 | core_dll.img_size = nt->OptionalHeader.SizeOfImage; |
44 | core_dll.img_md = NULL; |
||
45 | |||
890 | serge | 46 | |
892 | serge | 47 | core_dll.img_sec = MakePtr(PIMAGE_SECTION_HEADER,nt, sizeof(IMAGE_NT_HEADERS32)); |
48 | core_dll.img_exp = MakePtr(PIMAGE_EXPORT_DIRECTORY,LOAD_BASE, |
||
49 | nt->OptionalHeader.DataDirectory[0].VirtualAddress); |
||
50 | core_dll.img_name = strupr(MakePtr(char*, LOAD_BASE, exp->Name)); |
||
51 | |||
890 | serge | 52 | |
892 | serge | 53 | core_dll.img_name, core_dll.img_base, |
54 | core_dll.img_size, nt->FileHeader.NumberOfSections, |
||
55 | core_dll.img_exp ); |
||
56 | }; |
||
57 | |||
890 | serge | 58 | |
59 | |||
892 | serge | 60 | { |
890 | serge | 61 | dll_t* dll = &core_dll; |
892 | serge | 62 | |
890 | serge | 63 | |
892 | serge | 64 | { |
65 | if( !strncmp(name,dll->img_name,16)) |
||
66 | return dll; |
||
67 | |||
890 | serge | 68 | |
892 | serge | 69 | |
890 | serge | 70 | |
892 | serge | 71 | |
890 | serge | 72 | |
892 | serge | 73 | }; |
890 | serge | 74 | |
75 | |||
76 | |||
77 | { |
||
78 | char srv_name[16]; // ASCIIZ string |
||
79 | u32_t magic; // +0x10 'SRV ' |
||
80 | size_t size; // +0x14 size of structure SRV |
||
81 | void *fd; // +0x18 next SRV descriptor |
||
82 | void *bk; // +0x1C prev SRV descriptor |
||
83 | addr_t base; // +0x20 service base address |
||
84 | addr_t entry; // +0x24 service START function |
||
85 | void *srv_proc; // +0x28 main service handler |
||
86 | }srv_t; |
||
87 | |||
88 | |||
89 | |||
90 | |||
91 | { |
||
92 | PIMAGE_DOS_HEADER dos; |
||
93 | PIMAGE_NT_HEADERS32 nt; |
||
94 | |||
95 | |||
96 | md_t *md; |
||
97 | srv_t *srv; |
||
98 | |||
99 | |||
100 | |||
101 | |||
102 | return 0; |
||
103 | |||
104 | |||
892 | serge | 105 | { |
890 | serge | 106 | dos = (PIMAGE_DOS_HEADER)md->base; |
892 | serge | 107 | nt = MakePtr( PIMAGE_NT_HEADERS32, dos, dos->e_lfanew); |
108 | |||
890 | serge | 109 | |
892 | serge | 110 | nt->OptionalHeader.AddressOfEntryPoint); |
111 | |||
890 | serge | 112 | |
892 | serge | 113 | |
890 | serge | 114 | |
892 | serge | 115 | srv->entry = nt->OptionalHeader.AddressOfEntryPoint + md->base; |
116 | |||
890 | serge | 117 | |
892 | serge | 118 | } |
890 | serge | 119 | else |
892 | serge | 120 | { |
890 | serge | 121 | md_free( md ); |
892 | serge | 122 | return NULL; |
890 | serge | 123 | } |
124 | }=> |
||
892 | serge | 125 |