def begin_trace(args=None, pid=None):
    # Load the functions defined in the autogenerated
    # ltraceosx/data/funcs.json and overridden by special.json in the same
    # directory.
    data_dir = os.path.join(os.path.dirname(__file__), 'data')
    funcs_filename = os.path.join(data_dir, 'funcs.json')
    special_filename = os.path.join(data_dir, 'special.json')
    funcs = json.loads(open(funcs_filename).read())
    funcs.update(json.loads(open(special_filename).read()))

    # Attach to, or launch, program
    tracer = Tracer()
    if pid is not None:
        path = debug.path_for_pid(pid)
        if not os.path.exists(path):
            raise IOError("could not find file %r for pid %r." % (path, pid))
        tracer.attach(pid)
        attached = True
    else:
        path = args[0]
        if not os.path.exists(path):
            raise IOError("could not find file %r." % (path,))
        tracer.start(args)

    # Get information about the stubs section
    stubs = load_stubs(path, 0x1000007 if tracer.is64 else 0x7)
    stubs_content = stubs['stubs_content']

    # Find stubs in memory
    stubs_address = tracer.search_memory(stubs_content[:24])
    if stubs_address is None:
        raise LtraceException("couldn't find stubs in memory.")

    # Add breakpoints to every entry in the stubs section.
    calling_convention = SystemV64ABI if tracer.is64 else Cdecl
    for i in range(0, len(stubs_content), 6):
        name = stubs['stubs_names'][i / 6]
        if name not in funcs:
            print 'Warning: no prototype for function: %r' % name
        data = funcs.get(name, {})
        breakpoint = LibraryCallBreakpoint(name, data, calling_convention)
        tracer.add_breakpoint(stubs_address + i, breakpoint)
    del funcs

    # Go!
    tracer.run()
    return 0
Exemple #2
0
        def accept(self, event=None):
            self.accepted = True
            self.close()

        @staticmethod
        def get_band_n_rate(oldband, oldrate, parent=None):
            popup = TkTracerWindow.BandAndRateWindow(oldband, oldrate, parent)
            popup.window.grab_set()
            popup.window.wait_window(popup.window)
            if popup.accepted:
                try:
                    if len(popup.band_value) != 0:
                        int(popup.band_value)
                    float(popup.rate_value)
                except ValueError:
                    messagebox.showerror('Error', 'Bad entry !')
            return popup.accepted, popup.band_value, popup.rate_value


if __name__ == '__main__':

    main_tracer = Tracer()
    main_tracer.run(show=False)

    app = tk.Tk()

    main_window = TkTracerWindow(app, main_tracer)

    app.mainloop()
Exemple #3
0
			grid.addWidget( buttons, 4, 1 )

			self.setLayout( grid )

		@staticmethod
		def get_band_n_rate( oldband, oldrate, parent = None ) :
			popup = QTracerWindow.BandAndRateWindow( oldband, oldrate, parent )
			accepted = popup.exec_()
			newband, newrate = popup.band_entry.text(), popup.rate_entry.text()
			if accepted == QtGui.QDialog.Accepted :
				try :
					if len( newband ) != 0 :
						int( newband )
					float( newrate )
				except ValueError :
					QtGui.QMessageBox.critical( parent, 'Error', 'Bad entry !' )
			return accepted == QtGui.QDialog.Accepted, newband, newrate


if __name__ == '__main__' :

	main_tracer = Tracer()
	main_tracer.run( show=False )

	app = QtGui.QApplication( sys.argv )

	main_window = QTracerWindow( main_tracer )

	sys.exit( app.exec_() )
    try:
        db = DbServer(DB_URL)
        tracer = Tracer(user=PACER_USER,
                        password=PACER_PASS,
                        num_days=NUM_DAYS,
                        db=db)

        slacker = Slacker(webhook=SLACK_WEBHOOK,
                            db=db)
        if args.drop:
                db.delete_all_cases()
                db.drop_tables()
        elif args.test:
            tracer.parse_test()
        elif args.bot:
                slacker.get_latest_counts(days=10, prevent_timeout=True)
        elif args.all:
                tracer.run()
                slacker.get_latest_counts()
        elif args.people:
                [db.add_party(c) for c in INTITAL_PARTIES]
        else:
            tracer.run()
            slacker.get_latest_counts(days=2)

    except Exception as e:
        exc_type, exc_obj, tb = sys.exc_info()
        logging.error(e)
        PrintException(logging)