private static void InsertVmBody(object sender, ModuleWriterEventArgs e) { var mainSection = new PESection(".Nasha0", 0x60000020); var references = new PESection(".Nasha1", 0x60000020); var opcodesList = new PESection(".Nasha2", 0x60000020); var writer = (ModuleWriterBase)sender; TokenGetter.Writer = writer; if (e.Event != ModuleWriterEvent.MDMemberDefRidsAllocated) { return; } var translated = Settings.Translated; var bufferedLength = 0; var nasha0 = new byte[0]; for (int i = 0; i < translated.Count; ++i) { var methodBytes = Settings.Serialize(translated[i]); Array.Resize(ref nasha0, nasha0.Length + methodBytes.Count); methodBytes.CopyTo(nasha0, bufferedLength); Settings.Translated[i].Method.Body.Instructions.Last(x => x.OpCode == OpCodes.Ldc_I4).Operand = bufferedLength; bufferedLength += methodBytes.Count; } mainSection.Add(new ByteArrayChunk(Compress(nasha0)), 1); references.Add(new ByteArrayChunk(Compress(Settings.TranslateReference().ToArray())), 1); opcodesList.Add(new ByteArrayChunk(NashaSettings.TranslateOpcodes().ToArray()), 1); NashaSections.Add(mainSection); NashaSections.Add(references); NashaSections.Add(opcodesList); }
private static void InsertVMBodies(object sender, ModuleWriterEventArgs e) { var MainSection = new PESection(".Nasha0", 0x60000020); var Referencies = new PESection(".Nasha1", 0x60000020); var writer = (ModuleWriterBase)sender; if (e.Event != ModuleWriterEvent.MDMemberDefRidsAllocated) { return; } var translateds = settings.Translated; var buferedLength = 0; var nasha0 = new byte[0]; foreach (var translated in translateds) { var methodBytes = settings.Serialize(translated); Array.Resize(ref nasha0, nasha0.Length + methodBytes.Count); methodBytes.CopyTo(nasha0, buferedLength); buferedLength += methodBytes.Count; } MainSection.Add(new ByteArrayChunk(Compress(nasha0)), 1); Referencies.Add(new ByteArrayChunk(new byte[1]), 1); NashaSections.Add(MainSection); NashaSections.Add(Referencies); }