protected override void SaveInternal(VirtualWriter wtr) { wtr.Write(s); wtr.Write(maVer); wtr.Write(miVer); Rva mdAdr = 0; uint mdSize = 0; Rva resAdr = 0; Rva snAdr = 0; Rva cmAdr = 0; Rva vtAdr = 0; uint vtSize = 0; Rva eatAdr = 0; Rva mnAdr = 0; Rva mdHdrAdr = wtr.GetPosition(); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)f); if ((f & RuntimeFlags.NativeEntryPoint) == RuntimeFlags.NativeEntryPoint) { wtr.Write(e); } else { wtr.Write(t); } Rva otherHdrAdr = wtr.GetPosition(); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); wtr.Write((uint)0); ////////////////////////////////////////////// if (dats.DatasLocation == 0) { dats.DatasLocation = this.Location.Address + 72; dats.Save(wtr); wtr.Write(new byte[((wtr.BaseStream.Position + 3) & ~3) - wtr.BaseStream.Position]); } else { //wtr.SaveLocation(); wtr.SetPosition(dats.DatasLocation); dats.Save(wtr); wtr.Write(new byte[((wtr.BaseStream.Position + 3) & ~3) - wtr.BaseStream.Position]); //wtr.LoadLocation(); } mdAdr = wtr.GetPosition(); mdSize = md.GetSize(); md.Save(wtr, wtr.GetPosition()); wtr.Write(new byte[(mdSize + 3) & ~3 - mdSize]); if (res.Length != 0) { resAdr = wtr.GetPosition(); wtr.Write(res); wtr.Write(new byte[(res.Length + 3) & ~3 - res.Length]); } if (sn.Length != 0) { snAdr = wtr.GetPosition(); wtr.Write(sn); wtr.Write(new byte[(sn.Length + 3) & ~3 - sn.Length]); } if (cm.Length != 0) { cmAdr = wtr.GetPosition(); wtr.Write(cm); wtr.Write(new byte[(cm.Length + 3) & ~3 - cm.Length]); } if (vtSize != 0) { vtAdr = wtr.GetPosition(); vtSize = vt.GetSize(); vt.Save(wtr, vtAdr); wtr.Write(new byte[(vtSize + 3) & ~3 - vtSize]); } if (eat.Length != 0) { eatAdr = wtr.GetPosition(); wtr.Write(eat); wtr.Write(new byte[(eat.Length + 3) & ~3 - eat.Length]); } if (mn.Length != 0) { mnAdr = wtr.GetPosition(); wtr.Write(mn); wtr.Write(new byte[(mn.Length + 3) & ~3 - mn.Length]); } ////////////////////////////////////////////////////// wtr.SetPosition(mdHdrAdr); wtr.Write(mdAdr); wtr.Write(mdSize); wtr.SetPosition(otherHdrAdr); wtr.Write(resAdr); wtr.Write((uint)res.Length); wtr.Write(snAdr); wtr.Write((uint)sn.Length); wtr.Write(cmAdr); wtr.Write((uint)cm.Length); wtr.Write(vtAdr); wtr.Write(vtSize); wtr.Write(eatAdr); wtr.Write((uint)eat.Length); wtr.Write(mnAdr); wtr.Write((uint)mn.Length); }