GetStandAloneSignature() public method

public GetStandAloneSignature ( CallSite call_site ) : Mono.Cecil.Metadata.MetadataToken
call_site CallSite
return Mono.Cecil.Metadata.MetadataToken
Esempio n. 1
0
        void PatchRawFatMethod(ByteBuffer buffer, CodeWriter writer, out int code_size, out MetadataToken local_var_token)
        {
            var flags = ReadUInt16();

            buffer.WriteUInt16(flags);
            buffer.WriteUInt16(ReadUInt16());
            code_size = ReadInt32();
            buffer.WriteInt32(code_size);
            local_var_token = ReadToken();

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

            PatchRawCode(buffer, code_size, writer);

            if ((flags & 0x8) != 0)
            {
                PatchRawSection(buffer, writer.metadata);
            }
        }
Esempio n. 2
0
        private void PatchRawFatMethod(ByteBuffer buffer, MethodSymbols symbols, CodeWriter writer, out MetadataToken local_var_token)
        {
            uint   num;
            ushort num1 = base.ReadUInt16();

            buffer.WriteUInt16(num1);
            buffer.WriteUInt16(base.ReadUInt16());
            symbols.code_size = base.ReadInt32();
            buffer.WriteInt32(symbols.code_size);
            local_var_token = this.ReadToken();
            if (local_var_token.RID <= 0)
            {
                buffer.WriteUInt32(0);
            }
            else
            {
                VariableDefinitionCollection    variableDefinitionCollection = this.ReadVariables(local_var_token);
                Collection <VariableDefinition> variableDefinitions          = variableDefinitionCollection;
                symbols.variables = variableDefinitionCollection;
                Collection <VariableDefinition> variableDefinitions1 = variableDefinitions;
                ByteBuffer byteBuffer = buffer;
                if (variableDefinitions1 != null)
                {
                    num = writer.GetStandAloneSignature(symbols.variables).ToUInt32();
                }
                else
                {
                    num = 0;
                }
                byteBuffer.WriteUInt32(num);
            }
            this.PatchRawCode(buffer, symbols.code_size, writer);
            if ((num1 & 8) != 0)
            {
                this.PatchRawSection(buffer, writer.metadata);
            }
        }
Esempio n. 3
0
        private void PatchRawFatMethod(ByteBuffer buffer, CodeWriter writer, out int code_size, out MetadataToken local_var_token)
        {
            ushort num = ReadUInt16();

            buffer.WriteUInt16(num);
            buffer.WriteUInt16(ReadUInt16());
            code_size = ReadInt32();
            buffer.WriteInt32(code_size);
            local_var_token = ReadToken();
            if (local_var_token.RID != 0)
            {
                VariableDefinitionCollection variableDefinitionCollection = ReadVariables(local_var_token);
                buffer.WriteUInt32((variableDefinitionCollection != null) ? writer.GetStandAloneSignature(variableDefinitionCollection).ToUInt32() : 0);
            }
            else
            {
                buffer.WriteUInt32(0u);
            }
            PatchRawCode(buffer, code_size, writer);
            if ((num & 8) != 0)
            {
                PatchRawSection(buffer, writer.metadata);
            }
        }
Esempio n. 4
0
        private void PatchRawFatMethod(ByteBuffer buffer, MethodSymbols symbols, CodeWriter writer, out MetadataToken local_var_token)
        {
            ushort num = base.ReadUInt16();

            buffer.WriteUInt16(num);
            buffer.WriteUInt16(base.ReadUInt16());
            symbols.code_size = base.ReadInt32();
            buffer.WriteInt32(symbols.code_size);
            local_var_token = this.ReadToken();
            if (local_var_token.RID <= 0)
            {
                buffer.WriteUInt32(0);
            }
            else
            {
                Collection <VariableDefinition> collection = symbols.variables = this.ReadVariables(local_var_token);
                buffer.WriteUInt32((collection != null) ? writer.GetStandAloneSignature(symbols.variables).ToUInt32() : 0);
            }
            this.PatchRawCode(buffer, symbols.code_size, writer);
            if ((num & 8) != 0)
            {
                this.PatchRawSection(buffer, writer.metadata);
            }
        }
Esempio n. 5
0
        void PatchRawCode(ByteBuffer buffer, int code_size, CodeWriter writer)
        {
            var metadata = writer.metadata;

            buffer.WriteBytes(ReadBytes(code_size));
            var end = buffer.position;

            buffer.position -= code_size;

            while (buffer.position < end)
            {
                OpCode opcode;
                var    il_opcode = buffer.ReadByte();
                if (il_opcode != 0xfe)
                {
                    opcode = OpCodes.OneByteOpCode [il_opcode];
                }
                else
                {
                    var il_opcode2 = buffer.ReadByte();
                    opcode = OpCodes.TwoBytesOpCode [il_opcode2];
                }

                switch (opcode.OperandType)
                {
                case OperandType.ShortInlineI:
                case OperandType.ShortInlineBrTarget:
                case OperandType.ShortInlineVar:
                case OperandType.ShortInlineArg:
                    buffer.position += 1;
                    break;

                case OperandType.InlineVar:
                case OperandType.InlineArg:
                    buffer.position += 2;
                    break;

                case OperandType.InlineBrTarget:
                case OperandType.ShortInlineR:
                case OperandType.InlineI:
                    buffer.position += 4;
                    break;

                case OperandType.InlineI8:
                case OperandType.InlineR:
                    buffer.position += 8;
                    break;

                case OperandType.InlineSwitch:
                    var length = buffer.ReadInt32();
                    buffer.position += length * 4;
                    break;

                case OperandType.InlineString:
                    var @string = GetString(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position -= 4;
                    buffer.WriteUInt32(
                        new MetadataToken(
                            TokenType.String,
                            metadata.user_string_heap.GetStringIndex(@string)).ToUInt32());
                    break;

                case OperandType.InlineSig:
                    var call_site = GetCallSite(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position -= 4;
                    buffer.WriteUInt32(writer.GetStandAloneSignature(call_site).ToUInt32());
                    break;

                case OperandType.InlineTok:
                case OperandType.InlineType:
                case OperandType.InlineMethod:
                case OperandType.InlineField:
                    var provider = reader.LookupToken(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position -= 4;
                    buffer.WriteUInt32(metadata.LookupToken(provider).ToUInt32());
                    break;
                }
            }
        }
Esempio n. 6
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. 7
0
        void PatchRawCode(ByteBuffer buffer, int code_size, CodeWriter writer)
        {
            var metadata = writer.metadata;
            buffer.WriteBytes (ReadBytes (code_size));
            var end = buffer.position;
            buffer.position -= code_size;

            while (buffer.position < end) {
                OpCode opcode;
                var il_opcode = buffer.ReadByte ();
                if (il_opcode != 0xfe) {
                    opcode = OpCodes.OneByteOpCode [il_opcode];
                } else {
                    var il_opcode2 = buffer.ReadByte ();
                    opcode = OpCodes.TwoBytesOpCode [il_opcode2];
                }

                switch (opcode.OperandType) {
                case OperandType.ShortInlineI:
                case OperandType.ShortInlineBrTarget:
                case OperandType.ShortInlineVar:
                case OperandType.ShortInlineArg:
                    buffer.position += 1;
                    break;
                case OperandType.InlineVar:
                case OperandType.InlineArg:
                    buffer.position += 2;
                    break;
                case OperandType.InlineBrTarget:
                case OperandType.ShortInlineR:
                case OperandType.InlineI:
                    buffer.position += 4;
                    break;
                case OperandType.InlineI8:
                case OperandType.InlineR:
                    buffer.position += 8;
                    break;
                case OperandType.InlineSwitch:
                    var length = buffer.ReadInt32 ();
                    buffer.position += length * 4;
                    break;
                case OperandType.InlineString:
                    var @string = GetString (new MetadataToken (buffer.ReadUInt32 ()));
                    buffer.position -= 4;
                    buffer.WriteUInt32 (
                        new MetadataToken (
                            TokenType.String,
                            metadata.user_string_heap.GetStringIndex (@string)).ToUInt32 ());
                    break;
                case OperandType.InlineSig:
                    var call_site = GetCallSite (new MetadataToken (buffer.ReadUInt32 ()));
                    buffer.position -= 4;
                    buffer.WriteUInt32 (writer.GetStandAloneSignature (call_site).ToUInt32 ());
                    break;
                case OperandType.InlineTok:
                case OperandType.InlineType:
                case OperandType.InlineMethod:
                case OperandType.InlineField:
                    var provider = reader.LookupToken (new MetadataToken (buffer.ReadUInt32 ()));
                    buffer.position -= 4;
                    buffer.WriteUInt32 (metadata.LookupToken (provider).ToUInt32 ());
                    break;
                }
            }
        }
Esempio n. 8
0
        private void PatchRawCode(ByteBuffer buffer, int code_size, CodeWriter writer)
        {
            MetadataBuilder metadata = writer.metadata;

            buffer.WriteBytes(ReadBytes(code_size));
            int position = buffer.position;

            buffer.position -= code_size;
            while (buffer.position < position)
            {
                byte   b = buffer.ReadByte();
                OpCode opCode;
                if (b != 254)
                {
                    opCode = OpCodes.OneByteOpCode[b];
                }
                else
                {
                    byte b2 = buffer.ReadByte();
                    opCode = OpCodes.TwoBytesOpCode[b2];
                }
                MetadataToken metadataToken;
                switch (opCode.OperandType)
                {
                case OperandType.ShortInlineBrTarget:
                case OperandType.ShortInlineI:
                case OperandType.ShortInlineVar:
                case OperandType.ShortInlineArg:
                    buffer.position++;
                    break;

                case OperandType.InlineVar:
                case OperandType.InlineArg:
                    buffer.position += 2;
                    break;

                case OperandType.InlineBrTarget:
                case OperandType.InlineI:
                case OperandType.ShortInlineR:
                    buffer.position += 4;
                    break;

                case OperandType.InlineI8:
                case OperandType.InlineR:
                    buffer.position += 8;
                    break;

                case OperandType.InlineSwitch:
                {
                    int num = buffer.ReadInt32();
                    buffer.position += num * 4;
                    break;
                }

                case OperandType.InlineString:
                {
                    string @string = GetString(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position -= 4;
                    metadataToken    = new MetadataToken(TokenType.String, metadata.user_string_heap.GetStringIndex(@string));
                    buffer.WriteUInt32(metadataToken.ToUInt32());
                    break;
                }

                case OperandType.InlineSig:
                {
                    CallSite callSite = GetCallSite(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position -= 4;
                    metadataToken    = writer.GetStandAloneSignature(callSite);
                    buffer.WriteUInt32(metadataToken.ToUInt32());
                    break;
                }

                case OperandType.InlineField:
                case OperandType.InlineMethod:
                case OperandType.InlineTok:
                case OperandType.InlineType:
                {
                    IMetadataTokenProvider provider = reader.LookupToken(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position -= 4;
                    metadataToken    = metadata.LookupToken(provider);
                    buffer.WriteUInt32(metadataToken.ToUInt32());
                    break;
                }
                }
            }
        }
Esempio n. 9
0
        private void PatchRawCode(ByteBuffer buffer, int code_size, CodeWriter writer)
        {
            MetadataBuilder metadata = writer.metadata;

            buffer.WriteBytes(base.ReadBytes(code_size));
            int position = buffer.position;

            buffer.position -= code_size;
            while (buffer.position < position)
            {
                OpCode code;
                byte   index = buffer.ReadByte();
                if (index != 0xfe)
                {
                    code = OpCodes.OneByteOpCode[index];
                }
                else
                {
                    byte num3 = buffer.ReadByte();
                    code = OpCodes.TwoBytesOpCode[num3];
                }
                switch (code.OperandType)
                {
                case OperandType.InlineBrTarget:
                case OperandType.InlineI:
                case OperandType.ShortInlineR:
                    buffer.position += 4;
                    break;

                case OperandType.InlineField:
                case OperandType.InlineMethod:
                case OperandType.InlineTok:
                case OperandType.InlineType:
                    buffer.position -= 4;
                    buffer.WriteUInt32(metadata.LookupToken(this.reader.LookupToken(new MetadataToken(buffer.ReadUInt32()))).ToUInt32());
                    break;

                case OperandType.InlineI8:
                case OperandType.InlineR:
                    buffer.position += 8;
                    break;

                case OperandType.InlineSig:
                {
                    CallSite callSite = this.GetCallSite(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position -= 4;
                    buffer.WriteUInt32(writer.GetStandAloneSignature(callSite).ToUInt32());
                    break;
                }

                case OperandType.InlineString:
                {
                    string str = this.GetString(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position -= 4;
                    buffer.WriteUInt32(new MetadataToken(TokenType.String, metadata.user_string_heap.GetStringIndex(str)).ToUInt32());
                    break;
                }

                case OperandType.InlineSwitch:
                {
                    int num4 = buffer.ReadInt32();
                    buffer.position += num4 * 4;
                    break;
                }

                case OperandType.InlineVar:
                case OperandType.InlineArg:
                    buffer.position += 2;
                    break;

                case OperandType.ShortInlineBrTarget:
                case OperandType.ShortInlineI:
                case OperandType.ShortInlineVar:
                case OperandType.ShortInlineArg:
                    buffer.position++;
                    break;

                default:
                    break;
                }
            }
        }
Esempio n. 10
0
        private void PatchRawCode(ByteBuffer buffer, int code_size, CodeWriter writer)
        {
            OpCode          twoBytesOpCode;
            MetadataToken   standAloneSignature;
            MetadataBuilder metadataBuilder = writer.metadata;

            buffer.WriteBytes(base.ReadBytes(code_size));
            int num = buffer.position;

            buffer.position -= code_size;
            while (buffer.position < num)
            {
                byte num1 = buffer.ReadByte();
                if (num1 == 254)
                {
                    byte num2 = buffer.ReadByte();
                    twoBytesOpCode = OpCodes.TwoBytesOpCode[num2];
                }
                else
                {
                    twoBytesOpCode = OpCodes.OneByteOpCode[num1];
                }
                switch (twoBytesOpCode.OperandType)
                {
                case OperandType.InlineBrTarget:
                case OperandType.InlineI:
                case OperandType.ShortInlineR:
                {
                    buffer.position += 4;
                    continue;
                }

                case OperandType.InlineField:
                case OperandType.InlineMethod:
                case OperandType.InlineTok:
                case OperandType.InlineType:
                {
                    IMetadataTokenProvider metadataTokenProvider = this.reader.LookupToken(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position    -= 4;
                    standAloneSignature = metadataBuilder.LookupToken(metadataTokenProvider);
                    buffer.WriteUInt32(standAloneSignature.ToUInt32());
                    continue;
                }

                case OperandType.InlineI8:
                case OperandType.InlineR:
                {
                    buffer.position += 8;
                    continue;
                }

                case OperandType.InlineSig:
                {
                    Mono.Cecil.CallSite callSite = this.GetCallSite(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position    -= 4;
                    standAloneSignature = writer.GetStandAloneSignature(callSite);
                    buffer.WriteUInt32(standAloneSignature.ToUInt32());
                    continue;
                }

                case OperandType.InlineString:
                {
                    string str = this.GetString(new MetadataToken(buffer.ReadUInt32()));
                    buffer.position    -= 4;
                    standAloneSignature = new MetadataToken(Mono.Cecil.TokenType.String, metadataBuilder.user_string_heap.GetStringIndex(str));
                    buffer.WriteUInt32(standAloneSignature.ToUInt32());
                    continue;
                }

                case OperandType.InlineSwitch:
                {
                    int        num3       = buffer.ReadInt32();
                    ByteBuffer byteBuffer = buffer;
                    byteBuffer.position = byteBuffer.position + num3 * 4;
                    continue;
                }

                case OperandType.InlineVar:
                case OperandType.InlineArg:
                {
                    buffer.position += 2;
                    continue;
                }

                case OperandType.ShortInlineBrTarget:
                case OperandType.ShortInlineI:
                case OperandType.ShortInlineVar:
                case OperandType.ShortInlineArg:
                {
                    buffer.position++;
                    continue;
                }

                default:
                {
                    continue;
                }
                }
            }
        }