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); } }
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); } }
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); } }