MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / getPELoadAddress

Function getPELoadAddress

source/kernel/loader/loader.cpp:193–231  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

191}
192#if 0
193U32 getPELoadAddress(struct FsOpenNode* openNode, U32* section, U32* numberOfSections, U32* sizeOfSection) {
194 static U8 buffer[1024];
195 U64 pos = openNode->func->getFilePointer(openNode);
196 U32 len;
197 int offset;
198 U32 sizeOfOptionalHeader;
199
200 openNode->func->seek(openNode, 0);
201 len = openNode->func->readNative(openNode, buffer, sizeof(buffer));
202 openNode->func->seek(openNode, pos);
203 if (len != sizeof(buffer)) {
204 return FALSE;
205 }
206 // DOS Magic MZ
207 if (buffer[0] != 0x4D || buffer[1] != 0x5A) {
208 return 0;
209 }
210
211 // offset is pointer to IMAGE_NT_HEADERS
212 offset = buffer[0x3C] | ((int)buffer[0x3D] << 8);
213
214 // check IMAGE_NT_HEADERS.Signature
215 if (buffer[offset] != 0x50 || buffer[offset + 1] != 0x45 || buffer[offset + 2] != 0 || buffer[offset + 3] != 0) {
216 return 0;
217 }
218 // IMAGE_NT_HEADERS.FileHeader.NumberOfSections
219 *numberOfSections = buffer[offset + 0x6] | ((U32)buffer[offset + 0x7] << 8);
220
221 *sizeOfSection = 0x28;
222
223 // IMAGE_NT_HEADERS.FileHeader.SizeOfOptionalHeader
224 sizeOfOptionalHeader = buffer[offset + 0x14] | ((U32)buffer[offset + 0x15] << 8);
225
226 // section should not reference buffer, but be mapped into memory
227 *section = (U32)(buffer + offset + 0x14 /*sizeof(IMAGE_FILE_HEADER)*/ + sizeOfOptionalHeader + 4 /*sizeof(IMAGE_NT_HEADERS.Signature)*/);
228
229 // IMAGE_NT_HEADERS.OptionalHeader.ImageBase
230 return buffer[offset + 0x34] | ((U32)buffer[offset + 0x35] << 8) | ((U32)buffer[offset + 0x36] << 16) | ((U32)buffer[offset + 0x37] << 24);
231}
232#endif
233bool ElfLoader::loadProgram(KThread* thread, FsOpenNode* openNode, U32* eip) {
234 U8 buffer[sizeof(struct k_Elf32_Ehdr)] = { 0 };

Callers

nothing calls this directly

Calls 3

getFilePointerMethod · 0.45
seekMethod · 0.45
readNativeMethod · 0.45

Tested by

no test coverage detected