private void BuildTextMap()
{
TextMap textMap = text_map;
textMap.AddMap(TextSegment.Code, metadata.code.length, (!pe64) ? 4 : 16);
textMap.AddMap(TextSegment.Resources, metadata.resources.length, 8);
textMap.AddMap(TextSegment.Data, metadata.data.length, 4);
if (metadata.data.length > 0)
{
metadata.table_heap.FixupData(textMap.GetRVA(TextSegment.Data));
}
textMap.AddMap(TextSegment.StrongNameSignature, GetStrongNameLength(), 4);
BuildMetadataTextMap();
int length = 0;
if (debug_header != null && debug_header.HasEntries)
{
int num = debug_header.Entries.Length * 28;
int num2 = (int)textMap.GetNextRVA(TextSegment.BlobHeap) + num;
int num3 = 0;
for (int i = 0; i < debug_header.Entries.Length; i++)
{
ImageDebugHeaderEntry imageDebugHeaderEntry = debug_header.Entries[i];
ImageDebugDirectory directory = imageDebugHeaderEntry.Directory;
directory.AddressOfRawData = ((imageDebugHeaderEntry.Data.Length != 0) ? num2 : 0);
imageDebugHeaderEntry.Directory = directory;
num3 += imageDebugHeaderEntry.Data.Length;
num2 += num3;
}
length = num + num3;
}
textMap.AddMap(TextSegment.DebugDirectory, length, 4);
if (!has_reloc)
{
uint nextRVA = textMap.GetNextRVA(TextSegment.DebugDirectory);
textMap.AddMap(TextSegment.ImportDirectory, new Range(nextRVA, 0u));
textMap.AddMap(TextSegment.ImportHintNameTable, new Range(nextRVA, 0u));
textMap.AddMap(TextSegment.StartupStub, new Range(nextRVA, 0u));
}
else
{
uint nextRVA2 = textMap.GetNextRVA(TextSegment.DebugDirectory);
uint num4 = nextRVA2 + 48;
num4 = (uint)((int)(num4 + 15) & -16);
uint num5 = num4 - nextRVA2 + 27;
uint num6 = nextRVA2 + num5;
num6 = (uint)((module.Architecture == TargetArchitecture.IA64) ? ((int)(num6 + 15) & -16) : (2 + ((int)(num6 + 3) & -4)));
textMap.AddMap(TextSegment.ImportDirectory, new Range(nextRVA2, num5));
textMap.AddMap(TextSegment.ImportHintNameTable, new Range(num4, 0u));
textMap.AddMap(TextSegment.StartupStub, new Range(num6, GetStartupStubLength()));
}
}