code: private COFFFileHeader reloadCOFFFileHeader(PESignature pesig,
              MemoryMappedPE mmBytes, PEData data) throws IOException {
          // coff header starts right after the PE signature
          long offset = pesig.getOffset() + PESignature.PE_SIG.length;
          /* read bytes, size is fixed anyway */
          long sizeOfHeaders = data.getOptionalHeader().get(
                  WindowsEntryKey.SIZE_OF_HEADERS);
          logger.debug("SizeOfHeaders: " + sizeOfHeaders);
          // virtual end of header mapping marked by VA of first section
          long vEnd = data.getSectionTable().getSectionHeader(1)
                  .getAlignedVirtualAddress() - 1;
          // virtual start of headers TODO test
          long vStart = vEnd - sizeOfHeaders;
          long sliceStart = vStart + PESignature.PE_SIG.length;
          logger.debug("reading coff at start: " + sliceStart);
          byte[] headerbytes = mmBytes.slice(sliceStart, sliceStart
                  + COFFFileHeader.HEADER_SIZE);
          // construct header
          return COFFFileHeader.newInstance(headerbytes, offset);
      }
docs: TODO is this necessary? look it up