WriteUInt16() public method

public WriteUInt16 ( ushort value ) : void
value ushort
return void
Esempio n. 1
0
 private void Write(ResourceDirectory directory, int writeDepth, int currentDepth, ref int offset, Dictionary <string, int> strings, ref int stringTableOffset, ByteBuffer stringTable)
 {
     if (currentDepth == writeDepth)
     {
         ushort namedEntries = directory.SortEntries();
         // directory header
         win32_resources.WriteUInt32(directory.Characteristics);
         win32_resources.WriteUInt32(directory.TimeDateStamp);
         win32_resources.WriteUInt16(directory.MajorVersion);
         win32_resources.WriteUInt16(directory.MinVersion);
         win32_resources.WriteUInt16(namedEntries);
         win32_resources.WriteUInt16((ushort)(directory.Entries.Count - namedEntries));
         foreach (ResourceEntry entry in directory.Entries)
         {
             WriteEntry(entry, ref offset, strings, ref stringTableOffset, stringTable);
         }
     }
     else
     {
         foreach (ResourceEntry entry in directory.Entries)
         {
             Write(entry.Directory, writeDepth, currentDepth + 1, ref offset, strings, ref stringTableOffset, stringTable);
         }
     }
 }
Esempio n. 2
0
 private void WriteNameOrOrdinal(ResourceEntry entry, Dictionary <string, int> strings, ref int stringTableOffset, ByteBuffer stringTable)
 {
     if (entry.Name == null)
     {
         win32_resources.WriteUInt32(entry.Id);
     }
     else
     {
         int stringOffset;
         if (!strings.TryGetValue(entry.Name, out stringOffset))
         {
             stringOffset = stringTableOffset;
             strings.Add(entry.Name, stringOffset);
             stringTableOffset += entry.Name.Length * 2 + 2;
             stringTable.WriteUInt16((ushort)entry.Name.Length);
             foreach (char c in entry.Name)
             {
                 stringTable.WriteInt16((short)c);
             }
         }
         win32_resources.WriteUInt32(0x80000000U | (uint)stringOffset);
     }
 }
Esempio n. 3
0
        void PatchRawSmallSection(ByteBuffer buffer, MetadataBuilder metadata)
        {
            var length = ReadByte ();
            buffer.WriteByte (length);
            Advance (2);

            buffer.WriteUInt16 (0);

            var count = length / 12;

            PatchRawExceptionHandlers (buffer, metadata, count, false);
        }
Esempio n. 4
0
        void PatchRawFatMethod(ByteBuffer buffer, MethodSymbols symbols, CodeWriter writer, out MetadataToken local_var_token)
        {
            var flags = ReadUInt16 ();
            buffer.WriteUInt16 (flags);
            buffer.WriteUInt16 (ReadUInt16 ());
            symbols.code_size = ReadInt32 ();
            buffer.WriteInt32 (symbols.code_size);
            local_var_token = ReadToken ();

            if (local_var_token.RID > 0) {
                var variables = symbols.variables = ReadVariables (local_var_token);
                buffer.WriteUInt32 (variables != null
                    ? writer.GetStandAloneSignature (symbols.variables).ToUInt32 ()
                    : 0);
            } else
                buffer.WriteUInt32 (0);

            PatchRawCode (buffer, symbols.code_size, writer);

            if ((flags & 0x8) != 0)
                PatchRawSection (buffer, writer.metadata);
        }
Esempio n. 5
0
        void PatchRawExceptionHandlers(ByteBuffer buffer, MetadataBuilder metadata, int count, bool fat_entry)
        {
            const int fat_entry_size = 16;
            const int small_entry_size = 6;

            for (int i = 0; i < count; i++) {
                ExceptionHandlerType handler_type;
                if (fat_entry) {
                    var type = ReadUInt32 ();
                    handler_type = (ExceptionHandlerType) (type & 0x7);
                    buffer.WriteUInt32 (type);
                } else {
                    var type = ReadUInt16 ();
                    handler_type = (ExceptionHandlerType) (type & 0x7);
                    buffer.WriteUInt16 (type);
                }

                buffer.WriteBytes (ReadBytes (fat_entry ? fat_entry_size : small_entry_size));

                switch (handler_type) {
                case ExceptionHandlerType.Catch:
                    var exception = reader.LookupToken (ReadToken ());
                    buffer.WriteUInt32 (metadata.LookupToken (exception).ToUInt32 ());
                    break;
                default:
                    buffer.WriteUInt32 (ReadUInt32 ());
                    break;
                }
            }
        }
Esempio n. 6
0
 private void WriteNameOrOrdinal(ResourceEntry entry, Dictionary<string, int> strings, ref int stringTableOffset, ByteBuffer stringTable)
 {
     if (entry.Name == null)
     {
         win32_resources.WriteUInt32(entry.Id);
     }
     else
     {
         int stringOffset;
         if (!strings.TryGetValue(entry.Name, out stringOffset))
         {
             stringOffset = stringTableOffset;
             strings.Add(entry.Name, stringOffset);
             stringTableOffset += entry.Name.Length * 2 + 2;
             stringTable.WriteUInt16((ushort)entry.Name.Length);
             foreach (char c in entry.Name)
                 stringTable.WriteInt16((short)c);
         }
         win32_resources.WriteUInt32(0x80000000U | (uint)stringOffset);
     }
 }