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 ();
                        }
                }
Beispiel #2
0
 public ClassTable (PEFile pefile)
 {
         DefaultAttr = TypeAttr.Public;
         this.pefile = pefile;
         table = new Hashtable ();
 }