When looking at PE files in a hex editor, I often encountered some bytes between the section table and the first section, which doesn’t really make sense to me. As far as I am concerned, there should be a 00-byte padding in order to fit the alignment. However, here is a screenshot which demonstrates the opposite:
As it turned out the highlighted block is pretty much the Bound Import Table. But I am still confused. Why is this table not located in a section? Is this always the case or is it just the specification of a certain compiler/linker? I did not find any documentation on this specific issue. Everything one can find on this topic basically says:
- DOS MZ Header
- DOS Stub
- PE Header
- Section Table
- Section 1
- Section 2
- Section 3
… and so on
Before I encountered this issue I was not even aware of the fact, that there can be things outside of the sections (besides the ones i listed above, of course).
[EDIT]
Proof of concept (Since Mox did not believe me):


Data directories such as the
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORTcan exist outside of sections. Another example of a data directory existing outside of any known section would be theIMAGE_DIRECTORY_ENTRY_CERTIFICATEdata directory which is the data directory used to store the certificate information when an executable is signed.Data directories can point to data outside of a section, with-in a section, or they can point to the entire section. The
IMAGE_DIRECTORY_ENTRY_RESOURCEdata directory points to the entire “.rsrc” section. Certain data directories point to known sections and these are documented in the PE format specification by Microsoft.