MCPcopy Create free account
hub / github.com/EmmyLua/EmmyLuaDebugger / peParseBuffer

Function peParseBuffer

emmy_hook/src/libpe/libpe.cpp:255–316  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

253#pragma region Internals
254
255PE_STATUS peParseBuffer( PE *pe )
256{
257#define PE_SAFE_CAST( WHAT, TYPE, POS ) \
258 if( POS < pe->dwFileSize && pe->dwFileSize - POS >= sizeof(TYPE) ) \
259 { \
260 WHAT = (P##TYPE)(pe->pData + (POS)); \
261 } \
262 else \
263 { \
264 return PE_UNEXPECTED_EOF; \
265 } \
266
267 PE_SAFE_CAST( pe->Headers.DOS, IMAGE_DOS_HEADER, 0 );
268 if( pe->Headers.DOS->e_magic != IMAGE_DOS_SIGNATURE )
269 {
270 return PE_NOT_PE;
271 }
272
273 PE_SAFE_CAST( pe->Headers.NT, IMAGE_NT_HEADERS, (ULONG)pe->Headers.DOS->e_lfanew );
274 if( pe->Headers.NT->Signature != IMAGE_NT_SIGNATURE )
275 {
276 return PE_NOT_PE;
277 }
278
279 if( pe->Headers.NT->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC )
280 {
281 pe->Headers.Plus = FALSE;
282 pe->Headers.OPT.p32 = &((PIMAGE_NT_HEADERS32)pe->Headers.NT)->OptionalHeader;
283 pe->qwBaseAddress = pe->Headers.OPT.p32->ImageBase;
284 pe->dwImageSize = pe->Headers.OPT.p32->SizeOfImage;
285
286 pe->Sections.pHeaders = PE_IMAGE_FIRST_SECTION32( pe->Headers.NT );
287 }
288 else if( pe->Headers.NT->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC )
289 {
290 pe->Headers.Plus = TRUE;
291 pe->Headers.OPT.p64 = &((PIMAGE_NT_HEADERS64)pe->Headers.NT)->OptionalHeader;
292 pe->qwBaseAddress = pe->Headers.OPT.p64->ImageBase;
293 pe->dwImageSize = pe->Headers.OPT.p64->SizeOfImage;
294
295 pe->Sections.pHeaders = PE_IMAGE_FIRST_SECTION64( pe->Headers.NT );
296 }
297 else
298 {
299 return PE_NOT_PE;
300 }
301
302 pe->Sections.dwNumber = pe->Headers.NT->FileHeader.NumberOfSections;
303
304 PE_SET_PARSED( pe, SECTIONS );
305
306 PE_ADDRESS_FROM_VA
307 (
308 pe,
309 pe->EntryPoint,
310 pe->qwBaseAddress + PE_HEADERS_OPT_FIELD( pe, AddressOfEntryPoint )
311 );
312

Callers 2

peOpenFileFunction · 0.85
peOpenBufferFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected