public void Write(Nso nso) { byte[] raw = new byte[HEADER_SIZE]; using (MemoryStream ms = new MemoryStream(raw)) { BinaryWriter bw = new BinaryWriter(ms); bw.Write(Encoding.ASCII.GetBytes(HEADER_MAGIC)); bw.Write(dynAddr); bw.Write(bssStart); bw.Write(bssEnd); bw.Write(ehFrameStart); bw.Write(ehFrameEnd); bw.Write(moduleObj); } nso.WriteNso(4, BitConverter.GetBytes((uint)baseAddr)); nso.WriteNso((uint)baseAddr, raw); }
public void WriteExeFs(long addr, byte[] data) { var page = GetAddressPage(addr); if ((page.Permission & SegPerm.R) == SegPerm.R) { Nso curNso = GetAddressNso(addr); var baseAddr = GetNsoAddress(GetAddressNsoType(addr).Value); curNso.WriteNso((uint)(addr - baseAddr), data); } /* * long pos = addr; * int dataOff = 0; * * while (pos < addr + data.Length) * { * var page = GetAddressPage(pos); * if ((page.Permission & SegPerm.R) == SegPerm.R) * { * Nso curNso = GetAddressNso(pos); * long baseAddr = GetNsoAddress((NsoType)Nsos.ToList().IndexOf(curNso)); * long off = pos - page.Address; * int curSize = (int)Math.Min(page.Size - off, data.Length); * * byte[] sub = curNso.ReadNso((uint)(pos - baseAddr), curSize); * byte[] sub = new byte[curSize]; * curNso.WriteNso(); * Buffer.BlockCopy(sub, 0, fullBuffer, (int)(pos - addr), sub.Length); * pos += curSize; * } * else pos += page.Size; * } */ }