Ejemplo n.º 1
0
        public static void Rewrite(
            Program program,
            ProgramDataFlow summaries,
            DecompilerEventListener eventListener)
        {
            GlobalCallRewriter crw = new GlobalCallRewriter(program, summaries, eventListener);

            foreach (Procedure proc in program.Procedures.Values)
            {
                if (eventListener.IsCanceled())
                {
                    return;
                }
                ProcedureFlow flow = crw.mpprocflow[proc];
                flow.Dump(proc.Architecture);
                crw.AdjustLiveOut(flow);
                crw.EnsureSignature(proc, flow);
                crw.AddUseInstructionsForOutArguments(proc);
            }

            foreach (Procedure proc in program.Procedures.Values)
            {
                if (eventListener.IsCanceled())
                {
                    return;
                }
                crw.RewriteCalls(proc);
                crw.RewriteReturns(proc);
            }
        }
Ejemplo n.º 2
0
        public static void Rewrite(
            IPlatform platform,
            List <SsaTransform> ssts,
            ProgramDataFlow summaries,
            DecompilerEventListener eventListener)
        {
            CallRewriter crw = new CallRewriter(platform, summaries, eventListener);

            foreach (SsaTransform sst in ssts)
            {
                if (eventListener.IsCanceled())
                {
                    return;
                }
                var           proc = sst.SsaState.Procedure;
                ProcedureFlow flow = crw.mpprocflow[proc];
                flow.Dump(proc.Architecture);
                crw.EnsureSignature(sst.SsaState, proc.Frame, flow);
            }

            foreach (SsaTransform sst in ssts)
            {
                if (eventListener.IsCanceled())
                {
                    return;
                }
                crw.RewriteCalls(sst.SsaState);
                crw.RewriteReturns(sst.SsaState);
                crw.RemoveStatementsFromExitBlock(sst.SsaState);
            }
        }
Ejemplo n.º 3
0
        public static void Rewrite(Program program, ProgramDataFlow summaries)
        {
            GlobalCallRewriter crw = new GlobalCallRewriter(program, summaries);

            foreach (Procedure proc in program.Procedures.Values)
            {
                ProcedureFlow flow = (ProcedureFlow)crw.mpprocflow[proc];
                flow.Dump(program.Architecture);
                crw.AdjustLiveOut(flow);
                crw.EnsureSignature(proc, flow);
                crw.AddUseInstructionsForOutArguments(proc);
            }

            foreach (Procedure proc in program.Procedures.Values)
            {
                crw.RewriteCalls(proc);
                crw.RewriteReturns(proc);
            }
        }