Inheritance: System.IO.BinaryWriter
Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
 internal override void Write(PEWriter output)
 {
     //Console.WriteLine("Writing instruction " + instr + " with size " + size);
     if (twoByteInstr) output.Write(leadByte);
     output.Write((byte)instr);
 }
Ejemplo n.º 3
0
 internal override sealed void Write(PEWriter output)
 {
     base.Write(output);
     if (byteNum)
         output.Write((sbyte)val);
     else
         output.Write(val);
 }
Ejemplo n.º 4
0
 internal override void Write(PEWriter output)
 {
     output.WriteIndex(MDTable.GenericParam,parent.Row);
     output.WriteCodedIndex(CIx.TypeDefOrRef,constraint);
 }
Ejemplo n.º 5
0
 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);
 }
Ejemplo n.º 6
0
 internal override sealed void Write(PEWriter output)
 {
     output.Write(flags);
     output.StringsIndex(nameIx);
     output.BlobIndex(hashIx);
 }
Ejemplo n.º 7
0
 internal override sealed void Write(PEWriter output)
 {
     output.Write((byte)0x22);
     output.Write(fVal);
 }
Ejemplo n.º 8
0
 internal override sealed void Write(PEWriter output)
 {
     //Console.WriteLine("Writing the blob index for a TypeSpec");
     output.BlobIndex(sigIx);
 }
Ejemplo n.º 9
0
 /// <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);
 }
Ejemplo n.º 10
0
 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);
 }
Ejemplo n.º 11
0
 internal override void Write(PEWriter output)
 {
     output.WriteCodedIndex(CIx.ResolutionScope,scope);
     output.StringsIndex(nameIx);
     output.StringsIndex(nameSpaceIx);
 }
Ejemplo n.º 12
0
        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);
                }
            }
        }
Ejemplo n.º 13
0
 internal virtual void Write(PEWriter output)
 {
 }
Ejemplo n.º 14
0
 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);
 }
Ejemplo n.º 15
0
 internal override sealed void Write(PEWriter output)
 {
     output.WriteCodedIndex(CIx.MemberRefParent,parent);
     output.StringsIndex(nameIx);
     output.BlobIndex(sigIx);
 }
Ejemplo n.º 16
0
 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);
 }
Ejemplo n.º 17
0
 internal override sealed void Write(PEWriter output)
 {
     output.WriteDataRVA(data.DataOffset);
     output.WriteIndex(MDTable.Field,field.Row);
 }
Ejemplo n.º 18
0
 internal override sealed void Write(PEWriter output)
 {
     output.WriteCodedIndex(CIx.HasCustomAttr,parent);
     output.WriteCodedIndex(CIx.CustomAttributeType,type);
     output.BlobIndex(valIx);
 }
Ejemplo n.º 19
0
 internal override void Write(PEWriter output, bool fatFormat)
 {
     base.Write(output,fatFormat);
     output.Write(filterLabel.GetLabelOffset());
 }
Ejemplo n.º 20
0
 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);
 }
Ejemplo n.º 21
0
 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);
 }
Ejemplo n.º 22
0
 internal override sealed void Write(PEWriter output)
 {
     base.Write(output);
     output.Write(val);
 }
Ejemplo n.º 23
0
 internal override void Write(PEWriter output, bool fatFormat)
 {
     base.Write(output,fatFormat);
 }
Ejemplo n.º 24
0
 internal override sealed void Write(PEWriter output)
 {
     output.Write(flags);
     output.StringsIndex(nameIx);
     output.WriteCodedIndex(CIx.TypeDefOrRef,eventType);
 }
Ejemplo n.º 25
0
 internal override sealed void Write(PEWriter output)
 {
     output.Write(flags);
     output.WriteCodedIndex(CIx.MemberForwarded,meth);
     output.StringsIndex(iNameIx);
     output.WriteIndex(MDTable.ModuleRef,importScope.Row);
 }
Ejemplo n.º 26
0
 internal override sealed void Write(PEWriter output)
 {
     base.Write(output);
     output.Write(field.Token());
 }
Ejemplo n.º 27
0
 internal override sealed void Write(PEWriter output)
 {
     output.WriteIndex(MDTable.TypeDef,theClass.Row);
     output.WriteCodedIndex(CIx.TypeDefOrRef,theInterface);
 }
Ejemplo n.º 28
0
 internal override sealed void Write(PEWriter output)
 {
     output.WriteCodedIndex(CIx.HasFieldMarshal,field);
     output.BlobIndex(ntIx);
 }
Ejemplo n.º 29
0
        /// <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);
        }
Ejemplo n.º 30
0
 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));
 }