private void UpdateOptionalHeader() { var header = Assembly.NtHeaders.OptionalHeader; header.SizeOfCode = _textSectionBuilder.GetPhysicalLength(); header.SizeOfInitializedData = (_relocSectionBuilder != null ? _relocSectionBuilder.GetPhysicalLength() : 0) + (_rsrcSectionBuilder != null ? _rsrcSectionBuilder.GetPhysicalLength() : 0); header.BaseOfCode = _textSectionBuilder.Header.VirtualAddress; if (_relocSectionBuilder != null) { header.BaseOfData = _relocSectionBuilder.Header.VirtualAddress; } var lastSection = Assembly.SectionHeaders[Assembly.SectionHeaders.Count - 1]; header.SizeOfImage = lastSection.VirtualAddress + Align(lastSection.VirtualSize, Assembly.NtHeaders.OptionalHeader.SectionAlignment); header.SizeOfHeaders = 0x200; UpdateDataDirectories(); }