Citar
El campo PE sí que es un DWORD, pero la cadena PE es un WORD es toda regla, ocupa 2 bytes, por tanto no es un error.
La documentación especifica que es un DWORD "PE\0\0" por lo tanto deberías atenerte a lo que dicen los documentos. El otro WORD que no checkeas podría contener cualquier cosa.
Citar
No coloco ningún SEH porque generalmente eso se hacía cuando buscabas la base de kernel32.dll en memoria por el método tradicional, viendo la dirección que pusheo el sistema operativo en la pila para retornar a ella y a partir de ahí retrocediendo hasta encontrar el campo MZ, pero en este caso por cortesía de The Swash uso otro método, de forma que no accedo a memoria que no tenga permisos de lectura.
Pongamoslo así... para comenzar... cuando abrís el archivo y tomas e_lfanew, si el campo contiene un valor invalido que sobrepase el tamaño del mapa: estas muerto.