Deserialize() public method

public Deserialize ( SerializedSignature ss, Frame frame ) : FunctionType
ss SerializedSignature
frame Reko.Core.Frame
return FunctionType
Example #1
0
        public Tuple<int?, SystemService> ParseLine()
        {
            try
            {
                int? ordinal = ParseOrdinal();

                string callconv = ParseCallingConvention();

                var options = ParseOptions();

                var tok = Get();
                string fnName = tok.Value;
                var ssig = new SerializedSignature
                {
                    Convention = callconv,
                };
                ssig.Arguments = ParseParameters(ssig);
                SkipToEndOfLine();

                var deser = new X86ProcedureSerializer((IntelArchitecture)platform.Architecture, tlLoader, callconv);
                var sig = deser.Deserialize(ssig, new Frame(platform.FramePointerType));
                var svc = new SystemService
                {
                    ModuleName = moduleName.ToUpper(),
                    Name = fnName,
                    Signature = sig
                };
                return Tuple.Create(ordinal, svc);
            }
            catch
            {
                Services.RequireService<DecompilerEventListener>().Warn(
                    new NullCodeLocation(moduleName),
                    "Line {0} in the Wine spec file could not be read; skipping.",
                    lexer.lineNumber);
                SkipToEndOfLine();
                return null;
            }
        }
Example #2
0
        public void ParseLine()
        {
            var tok = Peek();
            if (tok.Type == TokenType.NUMBER)
            {
                tok = Get();
                int ordinal = Convert.ToInt32(tok.Value);

                Expect(TokenType.ID);

                if (PeekAndDiscard(TokenType.MINUS))
                {
                    Expect(TokenType.ID);
                }

                tok = Get();
                string fnName = tok.Value;
                var ssig = new SerializedSignature
                {
                    Convention = "pascal"
                };
                var args = new List<Argument_v1>();
                if (PeekAndDiscard(TokenType.LPAREN))
                {
                    while (LoadParameter(ssig, args))
                        ;
                    Expect(TokenType.RPAREN);
                }
                ssig.Arguments = args.ToArray();
                var deser = new X86ProcedureSerializer((IntelArchitecture) platform.Architecture, tlLoader, "pascal");
                var sig = deser.Deserialize(ssig, new Frame(PrimitiveType.Word16));
                var svc = new SystemService
                {
                    Name = fnName,
                    Signature = sig
                };
                tlLoader.LoadService(ordinal, svc);
            }
            for (;;)
            {
                // Discared entire line.
                var type = Get().Type;
                if (type == TokenType.EOF || type == TokenType.NL)
                    return;
            }
        }
Example #3
0
        public void ParseLine()
        {
            int? ordinal = ParseOrdinal();

            string callconv = ParseCallingConvention();

            var options = ParseOptions();

            var tok = Get();
            string fnName = tok.Value;
            var ssig = new SerializedSignature
            {
                Convention = callconv,
            };
            ssig.Arguments = ParseParameters(ssig);
            
            var deser = new X86ProcedureSerializer((IntelArchitecture)platform.Architecture, tlLoader, callconv);
            var sig = deser.Deserialize(ssig, new Frame(platform.FramePointerType));
            var svc = new SystemService
            {
                ModuleName = moduleName.ToUpper(),
                Name = fnName,
                Signature = sig
            };
            if (ordinal.HasValue)
            {
                tlLoader.LoadService(ordinal.Value, svc);
            }
            else
            {
                tlLoader.LoadService(fnName, svc);
            }

            for (;;)
            {
                // Discared entire line.
                var type = Get().Type;
                if (type == TokenType.EOF || type == TokenType.NL)
                    return;
            }
        }