DecompilerThread.h

Go to the documentation of this file.
00001 
00002 #include <QThread>
00003 #undef NO_ADDRESS
00004 #include "boomerang.h"
00005 
00006 class MainWindow;
00007 class FrontEnd;
00008 class Proc;
00009 class UserProc;
00010 class Prog;
00011 class Cluster;
00012 class QTableWidget;
00013 
00014 class Decompiler : public QObject, public Watcher
00015 {
00016     Q_OBJECT
00017 
00018 public:
00019     Decompiler() : QObject(), debugging(false), waiting(false) { }
00020 
00021     virtual void alert_decompile_debug_point(UserProc *p, const char *description);
00022     virtual void alert_considering(Proc *parent, Proc *p);
00023     virtual void alert_decompiling(UserProc *p);
00024     virtual void alert_new(Proc *p);
00025     virtual void alert_remove(Proc *p);
00026     virtual void alert_update_signature(Proc *p);
00027 
00028     bool getRtlForProc(const QString &name, QString &rtl);
00029     const char *getSigFile(const QString &name);
00030     const char *getClusterFile(const QString &name);
00031     void renameProc(const QString &oldName, const QString &newName);
00032     void rereadLibSignatures();
00033     void getCompoundMembers(const QString &name, QTableWidget *tbl);
00034 
00035     void setDebugging(bool d) { debugging = d; }
00036     void setUseDFTA(bool d);
00037     void setNoDecodeChildren(bool d);
00038 
00039     void addEntryPoint(ADDRESS a, const char *nam);
00040     void removeEntryPoint(ADDRESS a);
00041 
00042 public slots:
00043     void changeInputFile(const QString &f);
00044     void changeOutputPath(const QString &path);
00045     void load();
00046     void decode();
00047     void decompile();
00048     void generateCode();
00049     void stopWaiting();
00050 
00051 signals:
00052     void loading();
00053     void decoding();
00054     void decompiling();
00055     void generatingCode();
00056     void loadCompleted();
00057     void decodeCompleted();
00058     void decompileCompleted();
00059     void generateCodeCompleted();
00060 
00061     void consideringProc(const QString &parent, const QString &name);
00062     void decompilingProc(const QString &name);
00063     void newUserProc(const QString &name, unsigned int addr);
00064     void newLibProc(const QString &name, const QString &params);
00065     void removeUserProc(const QString &name, unsigned int addr);
00066     void removeLibProc(const QString &name);
00067     void newCluster(const QString &name);
00068     void newProcInCluster(const QString &name, const QString &cluster);
00069     void newEntrypoint(unsigned int addr, const QString &name);
00070     void newSection(const QString &name, unsigned int start, unsigned int end);
00071 
00072     void machineType(const QString &machine);
00073 
00074     void debuggingPoint(const QString &name, const QString &description);
00075 
00076 protected:
00077 
00078     bool debugging, waiting;
00079 
00080     FrontEnd *fe;
00081     Prog *prog;
00082 
00083     QString filename;
00084 
00085     const char *procStatus(UserProc *p);
00086     void emitClusterAndChildren(Cluster *root);
00087 
00088     std::vector<ADDRESS> user_entrypoints;
00089 };
00090 
00091 class DecompilerThread : public QThread
00092 {
00093     Q_OBJECT
00094 
00095 public:
00096     DecompilerThread() : QThread(), decompiler(NULL) { }
00097 
00098     Decompiler *getDecompiler();
00099 
00100 protected:
00101     void run();
00102 
00103     Decompiler *decompiler;
00104 };

Generated on Tue Sep 19 21:18:18 2006 for Boomerang by  doxygen 1.4.6