• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C# Core.ProcedureSignature类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C#中Reko.Core.ProcedureSignature的典型用法代码示例。如果您正苦于以下问题:C# ProcedureSignature类的具体用法?C# ProcedureSignature怎么用?C# ProcedureSignature使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



ProcedureSignature类属于Reko.Core命名空间,在下文中一共展示了ProcedureSignature类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。

示例1: Deserialize

        public override ProcedureSignature Deserialize(SerializedSignature ss, Frame frame)
        {
            if (ss == null)
                return null;
            this.argser = new ArgumentSerializer(this, Architecture, frame, ss.Convention);
            Identifier ret = null;
            int fpuDelta = FpuStackOffset;

            FpuStackOffset = 0;
            if (ss.ReturnValue != null)
            {
                ret = argser.DeserializeReturnValue(ss.ReturnValue);
                fpuDelta += FpuStackOffset;
            }

            FpuStackOffset = 0;
            var args = new List<Identifier>();
            if (ss.Arguments != null)
            {
                for (int iArg = 0; iArg < ss.Arguments.Length; ++iArg)
                {
                    var sArg = ss.Arguments[iArg];
                    var arg = DeserializeArgument(sArg, iArg, ss.Convention);
                    args.Add(arg);
                }
                fpuDelta -= FpuStackOffset;
            }
            FpuStackOffset = fpuDelta;

            var sig = new ProcedureSignature(ret, args.ToArray());
            ApplyConvention(ss, sig);
            return sig;
        }
开发者ID:gh0std4ncer,项目名称:reko,代码行数:33,代码来源:X86ProcedureSerializer.cs


示例2: ApplySignatureToProcedure

        public void ApplySignatureToProcedure(Address addr, ProcedureSignature sig, Procedure proc)
        {
            proc.Signature = sig;

            int i = 0;
            var stmts = proc.EntryBlock.Succ[0].Statements;
            var linAddr = addr.ToLinear();
            foreach (var param in sig.Parameters)
            {
                var starg = param.Storage as StackArgumentStorage;
                if (starg != null)
                {
                    proc.Frame.EnsureStackArgument(
                        starg.StackOffset + sig.ReturnAddressOnStack,
                        param.DataType,
                        param.Name);
                }
                else
                {
                    var paramId = proc.Frame.EnsureIdentifier(param.Storage);
                    paramId.DataType = param.DataType;

                    // Need to take an extra step with parameters being passed
                    // in a register. It's perfectly possible for a user to 
                    // create a variable which they want to call 'r2' but which
                    // the calling convention of the machine wants to call 'r1'.
                    // To avoid this, we create a temporary identifier for 
                    // the formal parameter, and inject an copy statement in the
                    // entry block that moves the parameter value into the 
                    // register.
                    stmts.Insert(i, linAddr, NewMethod(param, paramId));
                    ++i;
                }
            }
        }
开发者ID:gitter-badger,项目名称:reko,代码行数:35,代码来源:UserSignatureBuilder.cs


示例3: Deserialize

        public override ProcedureSignature Deserialize(SerializedSignature ss, Frame frame)
        {
            if (ss == null)
                return null;
            var argser = new ArgumentSerializer(this, Architecture, frame, ss.Convention);
            Identifier ret = null;

            if (ss.ReturnValue != null)
            {
                ret = argser.DeserializeReturnValue(ss.ReturnValue);
            }

            var args = new List<Identifier>();
            if (ss.Arguments != null)
            {
                for (int iArg = 0; iArg < ss.Arguments.Length; ++iArg)
                {
                    var sArg = ss.Arguments[iArg];
                    Identifier arg = argser.Deserialize(sArg);
                    args.Add(arg);
                }
            }

            var sig = new ProcedureSignature(ret, args.ToArray());
            return sig;
        }
开发者ID:gitter-badger,项目名称:reko,代码行数:26,代码来源:M68kProcedureSerializer.cs


示例4: ApplyConvention

 public void ApplyConvention(SerializedSignature ssig, ProcedureSignature sig)
 {
     string d = ssig.Convention;
     if (d == null || d.Length == 0)
         d = DefaultConvention;
     sig.StackDelta = 0;
     sig.FpuStackDelta = FpuStackOffset;
 }
开发者ID:feelworld,项目名称:reko,代码行数:8,代码来源:X86_64ProcedureSerializer.cs


示例5: ApplyConvention

 public void ApplyConvention(SerializedSignature ssig, ProcedureSignature sig)
 {
     string d = ssig.Convention;
     if (d == null || d.Length == 0)
         d = DefaultConvention;
     if (d == "stdapi" || d == "__stdcall" || d == "pascal")
         sig.StackDelta = StackOffset;
     sig.FpuStackDelta = FpuStackOffset;
 }
开发者ID:feelworld,项目名称:reko,代码行数:9,代码来源:X86ProcedureSerializer.cs


示例6: ApplyConvention

 public void ApplyConvention(SerializedSignature ssig, ProcedureSignature sig)
 {
     string d = ssig.Convention;
     if (d == null || d.Length == 0)
         d = DefaultConvention;
     sig.StackDelta = Architecture.PointerType.Size;  //$BUG: far/near pointers?
     if (d == "stdapi" || d == "__stdcall" || d == "pascal")
         sig.StackDelta += StackOffset;
     sig.FpuStackDelta = FpuStackOffset;
     sig.ReturnAddressOnStack = Architecture.PointerType.Size;   //$BUG: x86 real mode?
 }
开发者ID:nemerle,项目名称:reko,代码行数:11,代码来源:X86ProcedureSerializer.cs


示例7: PsigValidArguments

		public void PsigValidArguments()
		{
			Identifier arg = new Identifier(Registers.eax.Name, Registers.eax.DataType, Registers.eax);
			ProcedureSignature sig = new ProcedureSignature(null, new Identifier[] { arg });
			Assert.IsTrue(sig.ParametersValid);

			sig = new ProcedureSignature(arg, null);
			Assert.IsTrue(sig.ParametersValid);

			sig = new ProcedureSignature();
			Assert.IsFalse(sig.ParametersValid);
		}
开发者ID:gitter-badger,项目名称:reko,代码行数:12,代码来源:ProcedureSignatureTests.cs


示例8: ApplicationBuilderTests

 public ApplicationBuilderTests()
 {
     arch = new IntelArchitecture(ProcessorMode.Protected32);
     frame = arch.CreateFrame();
     ret = frame.EnsureRegister(Registers.eax);
     arg04 = new Identifier("arg04",   PrimitiveType.Word32, new StackArgumentStorage(4, PrimitiveType.Word32));
     arg08 = new Identifier("arg08",   PrimitiveType.Word16, new StackArgumentStorage(8, PrimitiveType.Word16));
     arg0C = new Identifier("arg0C",   PrimitiveType.Byte, new StackArgumentStorage(0x0C, PrimitiveType.Byte));
     regOut = new Identifier("edxOut", PrimitiveType.Word32, new OutArgumentStorage(frame.EnsureRegister(Registers.edx)));
     sig = new ProcedureSignature(ret,
         new Identifier[] { arg04, arg08, arg0C, regOut });
 }
开发者ID:nemerle,项目名称:reko,代码行数:12,代码来源:ApplicationBuilderTests.cs


示例9: RewriteFormals

 private void RewriteFormals(ProcedureSignature sig)
 {
     if (sig.ReturnValue != null)
         sig.ReturnValue.DataType = sig.ReturnValue.TypeVariable.DataType;
     if (sig.Parameters != null)
     {
         foreach (Identifier formalArg in sig.Parameters)
         {
             if (formalArg.TypeVariable != null)
                 formalArg.DataType = formalArg.TypeVariable.DataType;
         }
     }
 }
开发者ID:gitter-badger,项目名称:reko,代码行数:13,代码来源:TypedExpressionRewriter.cs


示例10: EnsureSignatureTypeVariables

 public void EnsureSignatureTypeVariables(ProcedureSignature signature)
 {
     if (signature == null || !signature.ParametersValid)
         return;
     if (signature.ReturnValue != null)
     {
         signature.ReturnValue.Accept(this);
     }
     foreach (var param in signature.Parameters)
     {
         param.Accept(this);
     }
 }
开发者ID:gitter-badger,项目名称:reko,代码行数:13,代码来源:EquivalenceClassBuilder.cs


示例11: PpcPs_Serialize

        public void PpcPs_Serialize()
        {
            Given_ProcedureSerializer();
            ProcedureSignature sig = new ProcedureSignature(
                new Identifier("qax", PrimitiveType.Word32, arch.Registers[3]),
                new Identifier[] {
                    new Identifier("qbx", PrimitiveType.Word32, arch.Registers[3])
                });

            SerializedSignature ssig = ser.Serialize(sig);
            Assert.IsNotNull(ssig.ReturnValue);
            Assert.AreEqual("qax", ssig.ReturnValue.Name);
            Register_v1 sreg = (Register_v1)ssig.ReturnValue.Kind;
            Assert.AreEqual("r3", sreg.Name);
        }
开发者ID:melbcat,项目名称:reko,代码行数:15,代码来源:PowerPcProcedureSerializerTests.cs


示例12: Test

 public void Test()
 {
     Given_ProcedureSerializer("stdapi");
     ProcedureSignature sig = new ProcedureSignature(
         new Identifier("qax", PrimitiveType.Word32, Registers.eax),
         new Identifier[] {
             new Identifier("qbx", PrimitiveType.Word32, Registers.ebx)
         });
         
     SerializedSignature ssig = ser.Serialize(sig);
     Assert.IsNotNull(ssig.ReturnValue);
     Assert.AreEqual("qax", ssig.ReturnValue.Name);
     Register_v1 sreg = (Register_v1) ssig.ReturnValue.Kind;
     Assert.AreEqual("eax", sreg.Name);
 }
开发者ID:melbcat,项目名称:reko,代码行数:15,代码来源:X86ProcedureSerializerTests.cs


示例13: ExtpBind

 public void ExtpBind()
 {
     var sig = new ProcedureSignature(
         new Identifier(Registers.ax.Name, PrimitiveType.Word16, Registers.ax),
         new Identifier [] {
             new Identifier(Registers.bx.Name, PrimitiveType.Word16, Registers.bx),
             new Identifier(Registers.cl.Name, PrimitiveType.Byte, Registers.cl) } );
     var ep = new ExternalProcedure("foo", sig);
     Assert.AreEqual("Register word16 foo(Register word16 bx, Register byte cl)", ep.ToString());
     var fn = new ProcedureConstant(PrimitiveType.Pointer32, ep);
     var arch = new FakeArchitecture();
     var frame = arch.CreateFrame();
     var ab = new ApplicationBuilder(new FakeArchitecture(), frame, new CallSite(0, 0), fn, ep.Signature, false);
     var instr = ab.CreateInstruction();
     Assert.AreEqual("ax = foo(bx, cl)", instr.ToString());
 }
开发者ID:nemerle,项目名称:reko,代码行数:16,代码来源:ExternalProcedureTest.cs


示例14: SvAmdPs_Serialize

        public void SvAmdPs_Serialize()
        {
            Given_ProcedureSerializer();

            mr.ReplayAll();

            var sig = new ProcedureSignature(
                new Identifier("rbx", PrimitiveType.Word32, arch.GetRegister("rbx")),
                new Identifier[] {
                    new Identifier("rbx", PrimitiveType.Word32, arch.GetRegister("rbx"))
                });

            SerializedSignature ssig = ser.Serialize(sig);
            Assert.IsNotNull(ssig.ReturnValue);
            Assert.AreEqual("rbx", ssig.ReturnValue.Name);
            Register_v1 sreg = (Register_v1)ssig.ReturnValue.Kind;
            Assert.AreEqual("rbx", sreg.Name);
        }
开发者ID:gitter-badger,项目名称:reko,代码行数:18,代码来源:X86_64ProcedureSerializerTests.cs


示例15: BindArguments

 public override List<Expression> BindArguments(Frame frame, ProcedureSignature sigCallee)
 {
     var actuals = new List<Expression>();
     int i;
     for (i = 0; i < sigCallee.Parameters.Length-1; ++i)
     {
         var formalArg = sigCallee.Parameters[i];
         var actualArg = formalArg.Storage.Accept(this);
         if (formalArg.Storage is OutArgumentStorage)
         {
             actuals.Add(new OutArgument(frame.FramePointer.DataType, actualArg));
         }
         else
         {
             actuals.Add(actualArg);
         }
     }
     return actuals;
 }
开发者ID:melbcat,项目名称:reko,代码行数:19,代码来源:PrintfApplicationBuilder.cs


示例16: VisitApplication

		public override void VisitApplication(Application appl)
		{
			signature = null;
			appl.Procedure.Accept(this);
			ProcedureSignature sig = signature;

			if (sig != null)
			{
				if (sig.Parameters.Length != appl.Arguments.Length)
					throw new InvalidOperationException("Parameter count must match.");
			}

			for (int i = 0; i < appl.Arguments.Length; ++i)
			{
				appl.Arguments[i].Accept(this);
				if (sig != null)
				{
					EnsureTypeVariable(sig.Parameters[i]);
					store.MergeClasses(appl.Arguments[i].TypeVariable, sig.Parameters[i].TypeVariable);
				}
			}
			EnsureTypeVariable(appl);
		}
开发者ID:gh0std4ncer,项目名称:reko,代码行数:23,代码来源:EquivalenceClassBuilder.cs


示例17: FrBindMixedParameters

        public void FrBindMixedParameters()
        {
            Frame f = new Frame(PrimitiveType.Word16);
            Identifier ax = f.EnsureRegister(Registers.ax);
            Identifier cx = f.EnsureRegister(Registers.cx);
            int stack = PrimitiveType.Word16.Size;
            Identifier arg1 = f.EnsureStackLocal(-stack, PrimitiveType.Word16);

            ProcedureSignature sig = new ProcedureSignature(
                ax,
                cx,
                new Identifier("arg0", PrimitiveType.Word16, new StackArgumentStorage(0, PrimitiveType.Word16)));

            var cs = new CallSite(stack, 0);
            ProcedureConstant fn = new ProcedureConstant(PrimitiveType.Pointer32, new PseudoProcedure("bar", sig));
            ApplicationBuilder ab = new ApplicationBuilder(arch, f, cs, fn, sig, true);
            Instruction instr = ab.CreateInstruction();
            using (FileUnitTester fut = new FileUnitTester("Core/FrBindMixedParameters.txt"))
            {
                f.Write(fut.TextWriter);
                fut.TextWriter.WriteLine(instr.ToString());
                fut.AssertFilesEqual();
            }
        }
开发者ID:nemerle,项目名称:reko,代码行数:24,代码来源:FrameTests.cs


示例18: OnAfterCall

 public override void OnAfterCall(ProcedureSignature sigCallee)
 {
 }
开发者ID:nemerle,项目名称:reko,代码行数:3,代码来源:Z80ProcessorState.cs


示例19: ExternalProcedure

 public ExternalProcedure(string name, ProcedureSignature signature, ProcedureCharacteristics chars)
     : base(name)
 {
     this.Signature = signature;
     this.Characteristics = chars;
 }
开发者ID:nemerle,项目名称:reko,代码行数:6,代码来源:ExternalProcedure.cs


示例20: OnAfterCall

 public override void OnAfterCall(Identifier stackReg, ProcedureSignature sigCallee, ExpressionVisitor<Expression> eval)
 {
     throw new NotImplementedException();
 }
开发者ID:gh0std4ncer,项目名称:reko,代码行数:4,代码来源:ThumbProcessorState.cs



注:本文中的Reko.Core.ProcedureSignature类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# Core.ProcessorState类代码示例发布时间:2022-05-26
下一篇:
C# Core.MemoryArea类代码示例发布时间:2022-05-26
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap