| 191 | } |
| 192 | #if 0 |
| 193 | U32 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 |
| 233 | bool ElfLoader::loadProgram(KThread* thread, FsOpenNode* openNode, U32* eip) { |
| 234 | U8 buffer[sizeof(struct k_Elf32_Ehdr)] = { 0 }; |
nothing calls this directly
no test coverage detected