public void Write () { FileStream out_stream = null; try { if (ThisModule == null) this_module = new Module (Path.GetFileName (output_file)); out_stream = new FileStream (output_file, FileMode.Create, FileAccess.Write); pefile = new PEFile (ThisAssembly != null ? ThisAssembly.Name : null, ThisModule.Name, is_dll, ThisAssembly != null, null, out_stream); PEAPI.Assembly asmb = pefile.GetThisAssembly (); ThisModule.PeapiModule = pefile.GetThisModule (); if (file_ref != null) file_ref.Resolve (this); extern_table.Resolve (this); type_manager.DefineAll (); if (manifestResources != null) { foreach (ManifestResource mr in manifestResources) pefile.AddManifestResource (mr); } foreach (FieldDef fielddef in global_field_table.Values) { fielddef.Define (this); } foreach (MethodDef methoddef in global_method_table.Values) { methoddef.Define (this); } foreach (TypeDef typedef in defcont_list) { typedef.DefineContents (this); } if (ThisAssembly != null) ThisAssembly.Resolve (this, pefile.GetThisAssembly ()); ThisModule.Resolve (this, pefile.GetThisModule ()); if (sub_system != -1) pefile.SetSubSystem ((PEAPI.SubSystem) sub_system); if (cor_flags != -1) pefile.SetCorFlags (cor_flags); if (stack_reserve != -1) pefile.SetStackReserve (stack_reserve); pefile.WritePEFile (); if (symwriter != null) { Guid guid = pefile.GetThisModule ().Guid; symwriter.Write (guid); } } finally { if (out_stream != null) out_stream.Close (); } }
public ClassTable (PEFile pefile) { DefaultAttr = TypeAttr.Public; this.pefile = pefile; table = new Hashtable (); }