public override void Write(ModuleWriter writer) { // Write the header. MemberHeader header = new MemberHeader(); header.memberType = (byte)MemberHeaderType.Event; header.memberName = GetModule().RegisterString(GetName()); header.memberFlags = (uint)GetFlags(); header.memberSize = 12; header.Write(writer); // Write the type and accessors.. writer.Write((uint)GetModule().RegisterType(GetVariableType())); if (addModifier != null) { writer.Write((uint)addModifier.GetSerialId()); } else { writer.Write((uint)0); } if (removeModifier != null) { writer.Write((uint)removeModifier.GetSerialId()); } else { writer.Write((uint)0); } }
public override void Write(ModuleWriter writer) { // Compute the field size. int fieldSize = 8; if (initializer != null) { fieldSize += initializer.GetQualifiedSize(); } // Write the header. MemberHeader header = new MemberHeader(); header.memberType = (byte)MemberHeaderType.Field; header.memberName = GetModule().RegisterString(GetName()); header.memberFlags = (uint)GetFlags(); header.memberSize = (uint)fieldSize; header.memberAttributes = GetAttributeCount(); header.Write(writer); // Write the attributes. WriteAttributes(writer); // Write the type and the slot. writer.Write((uint)GetModule().RegisterType(GetVariableType())); writer.Write((int)slot); // Write the initializer. if (initializer != null) { initializer.WriteQualified(GetModule(), writer); } }
public virtual void Write(ModuleWriter writer) { writer.Write(memberType); writer.Write(memberName); writer.Write(memberFlags); writer.Write(memberSize); writer.Write(memberAttributes); }
private static void CreateAssembly(string assembly, Bitness bitness, Action <ModuleDefMD> modifyAction = null) { var creationOptions = new ModuleCreationOptions { Context = ModuleDef.CreateModuleContext(), TryToLoadPdbFromDisk = true }; using var module = ModuleDefMD.Load(assembly, creationOptions); ChangeBitness(module, bitness); modifyAction?.Invoke(module); DisableEditAndContinueForModule(module); var path = Path.GetDirectoryName(module.Location); var filename = Path.GetFileNameWithoutExtension(module.Location); var extension = Path.GetExtension(module.Location); var saveFilename = $"{filename}.{bitness}{extension}"; module.Name = saveFilename; var moduleWriterOptions = new ModuleWriterOptions(module) { AddCheckSum = true, WritePdb = true }; var moduleWriter = new ModuleWriter(module, moduleWriterOptions); ReplaceMSCOREEReferenceWithIJWHostForNetCoreApp(module, moduleWriter); moduleWriter.Write(Path.Combine(path, saveFilename)); }
public override int Execute() { var hostedScript = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_path) }; hostedScript.Initialize(); ScriptFileHelper.OnBeforeScriptRead(hostedScript); var source = hostedScript.Loader.FromFile(_path); var compiler = hostedScript.GetCompilerService(); hostedScript.SetGlobalEnvironment(new DoNothingHost(), source); var writer = new ModuleWriter(compiler); try { writer.Write(Console.Out, source); } catch (ScriptException e) { Output.WriteLine(e.Message); return(1); } return(0); }
private void OnOpenAssembly(object sender, RoutedEventArgs e) { OpenFileDialog d = new OpenFileDialog(); d.DefaultExt = "Assembly files (*.dll) | *.dll;"; if (d.ShowDialog() == true) { try { Assembly asm = Assembly.UnsafeLoadFrom(d.FileName); StringBuilder text = new StringBuilder(); ModuleWriter mw = new ModuleWriter(); mw.Write(text, asm); SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = "Entities.ts"; if (sfd.ShowDialog() == true) { string code = text.ToString(); using (Stream fs = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write)) { using (TextWriter sw = new StreamWriter(fs)) { sw.WriteLine(code); } } } } catch (ReflectionTypeLoadException ex) { StringBuilder sb = new StringBuilder(); foreach (Exception exSub in ex.LoaderExceptions) { sb.AppendLine(exSub.Message); FileNotFoundException exFileNotFound = exSub as FileNotFoundException; if (exFileNotFound != null) { if (!string.IsNullOrEmpty(exFileNotFound.FusionLog)) { sb.AppendLine("Assembly Yüklenemedi:"); sb.AppendLine(exFileNotFound.FusionLog); } } sb.AppendLine(); } string errorMessage = sb.ToString(); MessageBox.Show(errorMessage); } catch { MessageBox.Show("Assembly Okunamadı"); } } }
public override void Write(ModuleWriter writer) { // Create the member header. MemberHeader mheader = new MemberHeader(); mheader.memberFlags = (uint)GetFlags(); mheader.memberName = 0; mheader.memberAttributes = 0; ChelaModule module = GetModule(); if (factory != null) { // This is a member instance. mheader.memberType = (byte)MemberHeaderType.MemberInstance; mheader.memberSize = (uint)8; // Write the member header. mheader.Write(writer); // Write the template. writer.Write(module.RegisterMember(template)); // Write the factory id. writer.Write(module.RegisterMember(factory)); } else { // This is a function instance mheader.memberType = (byte)MemberHeaderType.FunctionInstance; mheader.memberSize = (uint)(4 + genericInstance.GetSize()); // Write the member header. mheader.Write(writer); // Write the template id. writer.Write(module.RegisterMember(template)); // Write the template parameters. genericInstance.Write(writer, GetModule()); } }
public override void Write(ModuleWriter writer) { // Create the member header. MemberHeader mheader = new MemberHeader(); mheader.memberType = (byte) MemberHeaderType.MemberInstance; mheader.memberFlags = (uint) GetFlags(); mheader.memberName = 0; mheader.memberSize = 8; mheader.memberAttributes = 0; // Write the header. mheader.Write(writer); // Write the template. ChelaModule module = GetModule(); writer.Write(module.RegisterMember(template)); // Write the factory. writer.Write(module.RegisterMember(factory)); }
public override void Write(ModuleWriter writer) { // Create the member header. MemberHeader mheader = new MemberHeader(); mheader.memberFlags = (uint) GetFlags(); mheader.memberName = 0; mheader.memberAttributes = 0; ChelaModule module = GetModule(); if(factory != null) { // This is a member instance. mheader.memberType = (byte)MemberHeaderType.MemberInstance; mheader.memberSize = (uint)8; // Write the member header. mheader.Write(writer); // Write the template. writer.Write(module.RegisterMember(template)); // Write the factory id. writer.Write(module.RegisterMember(factory)); } else { // This is a function instance mheader.memberType = (byte)MemberHeaderType.FunctionInstance; mheader.memberSize = (uint)(4 + genericInstance.GetSize()); // Write the member header. mheader.Write(writer); // Write the template id. writer.Write(module.RegisterMember(template)); // Write the template parameters. genericInstance.Write(writer, GetModule()); } }
public override void Write(ModuleWriter writer) { // Create the member header. MemberHeader mheader = new MemberHeader(); mheader.memberType = (byte)MemberHeaderType.MemberInstance; mheader.memberFlags = (uint)GetFlags(); mheader.memberName = 0; mheader.memberSize = 8; mheader.memberAttributes = 0; // Write the header. mheader.Write(writer); // Write the template. ChelaModule module = GetModule(); writer.Write(module.RegisterMember(template)); // Write the factory. writer.Write(module.RegisterMember(factory)); }
public void Write(ModuleWriter writer) { writer.Write(functionType); writer.Write(numargs); writer.Write(numlocals); writer.Write(numblocks); writer.Write(numexceptions); writer.Write(vslot); }
public void Write(ModuleWriter writer) { writer.Write(baseStructure); writer.Write(numinterfaces); writer.Write(numfields); writer.Write(numvmethods); writer.Write(numcontracts); writer.Write(nummembers); }
private void btnConvert_Click(object sender, EventArgs e) { string sourcePath = tbSource.Text; string destPath = AppDomain.CurrentDomain.BaseDirectory + @"\" + tbDestination.Text; try { Assembly asm = Assembly.UnsafeLoadFrom(sourcePath); StringBuilder text = new StringBuilder(); ModuleWriter mw = new ModuleWriter(); mw.Write(text, asm); string code = text.ToString(); using (Stream fs = new FileStream(destPath, FileMode.Create, FileAccess.Write)) { using (TextWriter sw = new StreamWriter(fs)) { sw.WriteLine(code); } } MessageBox.Show("Entity was successfully created in the path : " + destPath); } catch (ReflectionTypeLoadException ex) { StringBuilder sb = new StringBuilder(); foreach (Exception exSub in ex.LoaderExceptions) { sb.AppendLine(exSub.Message); FileNotFoundException exFileNotFound = exSub as FileNotFoundException; if (exFileNotFound != null) { if (!string.IsNullOrEmpty(exFileNotFound.FusionLog)) { sb.AppendLine("Assembly cannot be loaded:"); sb.AppendLine(exFileNotFound.FusionLog); } } sb.AppendLine(); } string errorMessage = sb.ToString(); Console.WriteLine(errorMessage); } catch { Console.WriteLine("Assembly can not be read!"); } }
//Here we replace the AssemblyRef entry for TrinitySeal with Unitas.Runtime //With this, we not only hijack all library calls //But we also bypass the hash check static void ProcessAssembly(string vars) { Console.WriteLine("Processing assembly..."); var opts = new ModuleWriterOptions(_mod) { Logger = DummyLogger.NoThrowInstance }; var writer = new ModuleWriter(_mod, opts); foreach (var asmref in _mod.GetAssemblyRefs()) { if (asmref.Name != "TrinitySeal") { continue; } Console.WriteLine("Replacing reference"); asmref.Name = "Unitas.Runtime"; } Console.WriteLine("Fixing namespaces..."); foreach (var typeref in _mod.GetTypeRefs()) { if (typeref.Namespace == "TrinitySeal" && typeref.DefinitionAssembly.Name == "Unitas.Runtime") { typeref.Namespace = "Unitas.Runtime"; } } //Preserve EVERYTHING opts.MetadataOptions.PreserveHeapOrder(_mod, true); opts.MetadataOptions.Flags |= MetadataFlags.PreserveRids | MetadataFlags.KeepOldMaxStack; var runtime = Path.Combine(Path.GetDirectoryName(_mod.Location), "Unitas.Runtime.dll"); File.Copy(typeof(Seal).Assembly.Location, runtime, true); if (vars != null) { AddServerVariables(vars, runtime); } writer.Write(GetNewName()); Console.WriteLine($"Bypassed assembly saved at: {GetNewName()}"); }
public override void Write(ModuleWriter writer) { // Write the header. MemberHeader header = new MemberHeader(); header.memberType = (byte) MemberHeaderType.Event; header.memberName = GetModule().RegisterString(GetName()); header.memberFlags = (uint) GetFlags(); header.memberSize = 12; header.Write(writer); // Write the type and accessors.. writer.Write((uint)GetModule().RegisterType(GetVariableType())); if(addModifier != null) writer.Write((uint)addModifier.GetSerialId()); else writer.Write((uint)0); if(removeModifier != null) writer.Write((uint)removeModifier.GetSerialId()); else writer.Write((uint)0); }
/// <summary> /// Writes the module to a stream. /// </summary> /// <param name="dest">Destination stream</param> /// <param name="options">Writer options</param> public void Write(Stream dest, ModuleWriterOptions options) { var writer = new ModuleWriter(this, options ?? new ModuleWriterOptions(this)); writer.Write(dest); }
/// <summary> /// Writes the module to a file on disk. If the file exists, it will be truncated. /// </summary> /// <param name="filename">Filename</param> /// <param name="options">Writer options</param> public void Write(string filename, ModuleWriterOptions options) { var writer = new ModuleWriter(this, options ?? new ModuleWriterOptions(this)); writer.Write(filename); }
public void Write(ModuleWriter writer, ChelaModule module) { writer.Write(module.RegisterString(name)); }
public override void Write(ModuleWriter writer) { // Compute the field size. int fieldSize = 8; if(initializer != null) fieldSize += initializer.GetQualifiedSize(); // Write the header. MemberHeader header = new MemberHeader(); header.memberType = (byte) MemberHeaderType.Field; header.memberName = GetModule().RegisterString(GetName()); header.memberFlags = (uint) GetFlags(); header.memberSize = (uint)fieldSize; header.memberAttributes = GetAttributeCount(); header.Write(writer); // Write the attributes. WriteAttributes(writer); // Write the type and the slot. writer.Write((uint)GetModule().RegisterType(GetVariableType())); writer.Write((int)slot); // Write the initializer. if(initializer != null) initializer.WriteQualified(GetModule(), writer); }
public override void Write(ModuleWriter writer) { writer.Write((uint)GetModule().RegisterType(GetVariableType())); writer.Write((uint)0); // Local flags. }