Пример #1
0
        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);
        }
Пример #2
0
        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);
        }