Example #1
0
    def disassemble(self, code, mname, trace=False, ssa=True):
        argnames, vargs, kargs = getargs(code)

        inst, targets = disassemble(code)

        name = code.co_name.replace('<', '').replace('>', '')

        if trace:
            print "CODE", name
            print code.co_argcount
            print code.co_varnames
            self.dump(inst, targets)

        root = BlockBuilder().process(code, inst)

        pre = True
        post = True

        if trace and pre:
            FlowBlockDump().process(name + "_pre", root)

        try:
            StructuralAnalyzer().process(root.entry(), trace)
        finally:
            if trace and post:
                FlowBlockDump().process(name + "_post", root)

        root = destack(code, mname, name, root, argnames, vargs, kargs,
                       self.compiler, decompileCode, trace)

        if ssa:
            root = ssatransform.evaluateCode(self.compiler, root)
            #root = ssitransform.ssiTransform(root)

        return root
Example #2
0
    def disassemble(self, code, mname, trace=False, ssa=True):
        argnames, vargs, kargs = getargs(code)

        inst, targets = disassemble(code)

        name = code.co_name.replace("<", "").replace(">", "")

        if trace:
            print "CODE", name
            print code.co_argcount
            print code.co_varnames
            self.dump(inst, targets)

        root = BlockBuilder().process(code, inst)

        pre = True
        post = True

        if trace and pre:
            FlowBlockDump().process(name + "_pre", root)

        try:
            StructuralAnalyzer().process(root.entry(), trace)
        finally:
            if trace and post:
                FlowBlockDump().process(name + "_post", root)

        root = destack(code, mname, name, root, argnames, vargs, kargs, self.compiler, decompileCode, trace)

        if ssa:
            root = ssatransform.evaluateCode(self.compiler, root)
            # root = ssitransform.ssiTransform(root)

        return root
Example #3
0
    def postProcessCode(self, code):
        self.rewrites = {}
        self.remap = {}
        self.fields = {}
        self.header = []

        self.processParameters(code)

        for name, group in self.groups.iteritems():
            self.processGroup(code, name, group)

        rewrite.rewrite(self.compiler, code, self.rewrites)

        code.ast = ast.Suite([ast.InputBlock(self.header), code.ast])

        if self.ssaBroken:
            ssatransform.evaluateCode(self.compiler, code)

        simplify.evaluateCode(self.compiler, self.prgm, code)
	def postProcessCode(self, code):
		self.rewrites = {}
		self.remap = {}
		self.fields = {}
		self.header = []

		self.processParameters(code)

		for name, group in self.groups.iteritems():
			self.processGroup(code, name, group)

		rewrite.rewrite(self.compiler, code, self.rewrites)

		code.ast = ast.Suite([ast.InputBlock(self.header), code.ast])

		if self.ssaBroken:
			ssatransform.evaluateCode(self.compiler, code)

		simplify.evaluateCode(self.compiler, self.prgm, code)