/home/joxean/proyectos/tool/dis/dbprint.py

     #!/usr/bin/python

     """
     Example usage of the ASM Classes library and OpenDis framework
     A part of the Inguma Project
     """

     import sys
     import pickle
     import asmclasses

     def printProgram(database):
         f = file(database, "r")

         #
         # The database you will load will be in the following format
         #
         # 1) Raw data found in the .rodata section
         # 2) The whole program in Python structures
         #
         rodata, obj = pickle.load(f)

         print "Section .rodata: %s" % hex(rodata.address)
         print "-"*80
         print repr(rodata.data)
         print "-"*80
         print

         showLabel = False
         #
         # Iterate over all procedures in the program (List object)
         #
         for proc in obj:
             print "PROCEDURE", proc.name, "AT 0x" + proc.address

             #
             # Iterate over all lines in the procedure
             #
             for line in proc.lines:
                 if showLabel:
                     print "  %s:"  % line.label
                 if line.description:
                     mtype = str(type(line.description)).split("'")[1]
                     print "\t", "0x" + line.address.ljust(8) + ":", line.code.ljust(30), ";", mtype.ljust(4) + ":", repr(line.description)
                 else:
                     print "\t", "0x" + line.address.ljust(8) + ":", line.code.ljust(30)

                 # Current Instruction (Assume is x86)
                 instructions = line.code.split(" ")

                 if instructions[0].find("j") == 0 or instructions[0].find("call") > -1:
                     print
                     showLabel = True
                 else:
                     showLabel = False

             print "END PROCEDURE"
             print

     def usage():
         print "Example OpenDis framework's API usage"
         print
         print "Usage:", sys.argv[0], "<opendis format database>"
         print

     def main():
         if len(sys.argv) == 1:
             usage()
             sys.exit(0)
         else:
             printProgram(sys.argv[1])

     if __name__ == "__main__":
         main()