private void CalcOffsets()
{
if (sdata != null) numSections++;
if (rsrc != null) numSections++;
headerSize = FileImage.fileHeaderSize + (numSections * FileImage.sectionHeaderSize);
headerPadding = NumToAlign(headerSize,verInfo.fileAlign);
headerSize += headerPadding;
uint offset = headerSize;
uint rva = FileImage.SectionAlignment;
text.SetOffset(offset);
text.SetRVA(rva);
if (pdbWriter != null) debugRVA = rva + debugOffset;
offset += text.Size();
rva = GetNextSectStart(rva,text.Tide());
// Console.WriteLine("headerSize = " + headerSize);
// Console.WriteLine("headerPadding = " + headerPadding);
// Console.WriteLine("textOffset = " + Hex.Int(text.Offset()));
if (sdata != null) {
sdata.SetOffset(offset);
sdata.SetRVA(rva);
for (int i = 0; i < data.Count; i++) {
DataConstant cVal = (DataConstant)data[i];
cVal.DataOffset = sdata.Tide();
sdata.IncTide(cVal.GetSize());
}
sdata.SetSize(NumToAlign(sdata.Tide(),verInfo.fileAlign));
offset += sdata.Size();
rva = GetNextSectStart(rva,sdata.Tide());
initDataSize += sdata.Size();
}
if (rsrc != null) {
//Console.WriteLine("Resource section is not null");
rsrc.SetSize(NumToAlign(rsrc.Tide(),verInfo.fileAlign));
rsrc.SetOffset(offset);
rsrc.SetRVA(rva);
offset += rsrc.Size();
rva = GetNextSectStart(rva,rsrc.Tide());
initDataSize += rsrc.Size();
}
relocOffset = offset;
relocRVA = rva;
}