internal void WriteResources(PEWriter output) { if (resources == null) return; for (int i=0; i < resources.Count; i++) { byte[] resBytes = (byte[])resources[i]; output.Write((uint)resBytes.Length); output.Write(resBytes); } }
internal override void Write(PEWriter output) { //Console.WriteLine("Writing instruction " + instr + " with size " + size); if (twoByteInstr) output.Write(leadByte); output.Write((byte)instr); }
internal override sealed void Write(PEWriter output) { base.Write(output); if (byteNum) output.Write((sbyte)val); else output.Write(val); }
internal override void Write(PEWriter output) { output.WriteIndex(MDTable.GenericParam,parent.Row); output.WriteCodedIndex(CIx.TypeDefOrRef,constraint); }
internal override sealed void Write(PEWriter output) { //Console.WriteLine("Writing assembly element with nameIx of " + nameIx + " at file offset " + output.Seek(0,SeekOrigin.Current)); output.Write((uint)hashAlgId); output.Write(majorVer); output.Write(minorVer); output.Write(buildNo); output.Write(revisionNo); output.Write(flags); output.BlobIndex(keyIx); output.StringsIndex(nameIx); output.StringsIndex(cultIx); }
internal override sealed void Write(PEWriter output) { output.Write(flags); output.StringsIndex(nameIx); output.BlobIndex(hashIx); }
internal override sealed void Write(PEWriter output) { output.Write((byte)0x22); output.Write(fVal); }
internal override sealed void Write(PEWriter output) { //Console.WriteLine("Writing the blob index for a TypeSpec"); output.BlobIndex(sigIx); }
/// <summary> /// Write this instruction. This instruction does not get written /// to the PE file. It only applys to the PDB file. /// </summary> /// <param name="output">The PEWriter that is writing the PE file.</param> internal override void Write(PEWriter output) { if (output.pdbWriter != null) output.pdbWriter.CloseScope((int) offset); }
internal override sealed void Write(PEWriter output) { output.Write(flags); output.StringsIndex(nameIx); output.StringsIndex(nameSpaceIx); //if (superType != null) // Console.WriteLine("getting coded index for superType of " + name + " = " + superType.GetCodedIx(CIx.TypeDefOrRef)); output.WriteCodedIndex(CIx.TypeDefOrRef,superType); output.WriteIndex(MDTable.Field,fieldIx); output.WriteIndex(MDTable.Method,methodIx); }
internal override void Write(PEWriter output) { output.WriteCodedIndex(CIx.ResolutionScope,scope); output.StringsIndex(nameIx); output.StringsIndex(nameSpaceIx); }
internal void Write(PEWriter output) { if (Diag.DiagOn) Console.WriteLine("Writing header flags = " + Hex.Short(headerFlags)); if (tinyFormat) { if (Diag.DiagOn) Console.WriteLine("Writing tiny code"); output.Write((byte)headerFlags); } else { if (Diag.DiagOn) Console.WriteLine("Writing fat code"); output.Write(headerFlags); output.Write((ushort)maxStack); output.Write(offset); output.Write(localSigIx); } if (Diag.DiagOn) { Console.WriteLine(Hex.Int(tide) + " CIL instructions"); Console.WriteLine("starting instructions at " + output.Seek(0,SeekOrigin.Current)); } // Added to enable PDB generation if (output.pdbWriter != null) { // Open the method output.pdbWriter.OpenMethod((int)thisMeth.Token()); // Check if this is the entry point method if (thisMeth.HasEntryPoint()) output.pdbWriter.SetEntryPoint((int)thisMeth.Token()); } // Write out each memember of the buffer for (int i=0; i < tide; i++) { buffer[i].Write(output); } // Added to enable PDB generation if (output.pdbWriter != null && tide > 0) { output.pdbWriter.CloseMethod(); } if (Diag.DiagOn) Console.WriteLine("ending instructions at " + output.Seek(0,SeekOrigin.Current)); for (int i=0; i < paddingNeeded; i++) { output.Write((byte)0); } if (exceptions != null) { // Console.WriteLine("Writing exceptions"); // Console.WriteLine("header = " + Hex.Short(exceptHeader) + " exceptSize = " + Hex.Int(exceptSize)); output.Write(exceptHeader); output.Write3Bytes((uint)exceptSize); for (int i=0; i < exceptions.Count; i++) { TryBlock tryBlock = (TryBlock)exceptions[i]; tryBlock.Write(output,fatExceptionFormat); } } }
internal virtual void Write(PEWriter output) { }
internal void WriteTildeStream(PEWriter output) { long startTilde = output.Seek(0,SeekOrigin.Current); //Console.WriteLine("Starting tilde output at offset " + Hex.Long(startTilde)); output.Write((uint)0); // Reserved output.Write(output.verInfo.tsMajVer); // MajorVersion output.Write(output.verInfo.tsMinVer); // MinorVersion output.Write(heapSizes); output.Write((byte)1); // Reserved output.Write(valid); output.Write(sorted); for (int i=0; i < NumMetaDataTables; i++) { if (tables[i] != null) { uint count = (uint)tables[i].Count; output.Write(count); } } long tabStart = output.Seek(0,SeekOrigin.Current); //Console.WriteLine("Starting metaData tables at " + tabStart); for (int i=0; i < NumMetaDataTables; i++) { if (tables[i] != null) { //Console.WriteLine("Starting metaData table " + i + " at " + (output.Seek(0,SeekOrigin.Current) - startTilde)); ArrayList table = tables[i]; for (int j=0; j < table.Count; j++) { ((MetaDataElement)table[j]).Write(output); } } } // reset the typespec flags if (tables[(int)MDTable.TypeSpec] != null) { ArrayList typeSpecTable = tables[(int)MDTable.TypeSpec]; for (int i=0; i < typeSpecTable.Count; i++) { ((TypeSpec)typeSpecTable[i]).typeSpecAdded = false; } } //Console.WriteLine("Writing padding at " + output.Seek(0,SeekOrigin.Current)); for (int i=0; i < tildePadding; i++) output.Write((byte)0); }
internal override sealed void Write(PEWriter output) { output.WriteCodedIndex(CIx.MemberRefParent,parent); output.StringsIndex(nameIx); output.BlobIndex(sigIx); }
internal virtual void Write(PEWriter output, bool fatFormat) { if (fatFormat) output.Write(start.GetLabelOffset()); else output.Write((short)start.GetLabelOffset()); uint len = end.GetLabelOffset() - start.GetLabelOffset(); if (Diag.DiagOn) Console.WriteLine("block start = " + start.GetLabelOffset() + " len = " + len); if (fatFormat) output.Write(len); else output.Write((byte)len); }
internal override sealed void Write(PEWriter output) { output.WriteDataRVA(data.DataOffset); output.WriteIndex(MDTable.Field,field.Row); }
internal override sealed void Write(PEWriter output) { output.WriteCodedIndex(CIx.HasCustomAttr,parent); output.WriteCodedIndex(CIx.CustomAttributeType,type); output.BlobIndex(valIx); }
internal override void Write(PEWriter output, bool fatFormat) { base.Write(output,fatFormat); output.Write(filterLabel.GetLabelOffset()); }
internal override sealed void Write(PEWriter output) { output.Write((UInt16)action); // or should this be 2 bytes?? output.WriteCodedIndex(CIx.HasDeclSecurity,parent); output.BlobIndex(permissionIx); }
internal override void Write(PEWriter output) { output.Write(index); output.Write(flags); output.WriteCodedIndex(CIx.TypeOrMethodDef,parent); output.StringsIndex(nameIx); if (extraField) output.Write(kind); }
internal override sealed void Write(PEWriter output) { base.Write(output); output.Write(val); }
internal override void Write(PEWriter output, bool fatFormat) { base.Write(output,fatFormat); }
internal override sealed void Write(PEWriter output) { output.Write(flags); output.StringsIndex(nameIx); output.WriteCodedIndex(CIx.TypeDefOrRef,eventType); }
internal override sealed void Write(PEWriter output) { output.Write(flags); output.WriteCodedIndex(CIx.MemberForwarded,meth); output.StringsIndex(iNameIx); output.WriteIndex(MDTable.ModuleRef,importScope.Row); }
internal override sealed void Write(PEWriter output) { base.Write(output); output.Write(field.Token()); }
internal override sealed void Write(PEWriter output) { output.WriteIndex(MDTable.TypeDef,theClass.Row); output.WriteCodedIndex(CIx.TypeDefOrRef,theInterface); }
internal override sealed void Write(PEWriter output) { output.WriteCodedIndex(CIx.HasFieldMarshal,field); output.BlobIndex(ntIx); }
/// <summary> /// Write this instruction to a PDB file. /// </summary> /// <param name="output">The PE writer being used to write the PE and PDB files.</param> internal override void Write(PEWriter output) { string sf = ""; Guid doclang = Guid.Empty; Guid docvend = Guid.Empty; Guid doctype = Guid.Empty; if (sourceFile != null) { sf = sourceFile.name; doclang = sourceFile.language; docvend = sourceFile.vendor; doctype = sourceFile.document; } if (output.pdbWriter != null) output.pdbWriter.AddSequencePoint(sf, doclang, docvend, doctype, offset, startLine, startCol, endLine, endCol); }
internal void WriteMetaData(PEWriter output) { this.output = output; if (Diag.DiagOn) { mdStart = output.Seek(0,SeekOrigin.Current); Console.WriteLine("Writing metaData at " + Hex.Long(mdStart)); } output.Write(MetaDataSignature); output.Write(output.verInfo.mdMajVer); output.Write(output.verInfo.mdMinVer); output.Write(0); // Reserved output.Write(output.verInfo.netVerString.Length); output.Write(output.verInfo.netVerString.ToCharArray()); // version string is already zero padded output.Write((short)0); // Flags, reserved output.Write((ushort)numStreams); // write tilde header output.Write(tildeStart); output.Write(tildeTide + tildePadding); output.Write(tildeNameArray); for (int i=1; i < numStreams; i++) { if (Diag.DiagOn) Console.WriteLine("Stream " + new String(streams[i].name) + " should start at " + Hex.Long(streams[i].Start+mdStart)); streams[i].WriteHeader(output); } if (Diag.DiagOn) { Console.Write("Writing tilde stream at " + Hex.Long(output.Seek(0,SeekOrigin.Current))); Console.WriteLine(" should be at " + Hex.Long(tildeStart + mdStart)); } WriteTildeStream(output); for (int i=1; i < numStreams; i++) { if (Diag.DiagOn) Console.WriteLine("Writing stream " + new String(streams[i].name) + " at " + Hex.Long(output.Seek(0,SeekOrigin.Current))); streams[i].Write(output); } //Console.WriteLine("Finished Writing metaData at " + output.Seek(0,SeekOrigin.Current)); }