cutter/src/common/Decompiler.h
2021-01-24 18:34:16 +02:00

57 lines
1.2 KiB
C++

#ifndef DECOMPILER_H
#define DECOMPILER_H
#include "CutterCommon.h"
#include "RizinTask.h"
#include <rz_util/rz_annotated_code.h>
#include <QString>
#include <QObject>
/**
* Implements a decompiler that can be registered using CutterCore::registerDecompiler()
*/
class CUTTER_EXPORT Decompiler : public QObject
{
Q_OBJECT
private:
const QString id;
const QString name;
public:
Decompiler(const QString &id, const QString &name, QObject *parent = nullptr);
virtual ~Decompiler() = default;
static RzAnnotatedCode *makeWarning(QString warningMessage);
QString getId() const { return id; }
QString getName() const { return name; }
virtual bool isRunning() { return false; }
virtual bool isCancelable() { return false; }
virtual void decompileAt(RVA addr) = 0;
virtual void cancel() {}
signals:
void finished(RzAnnotatedCode *codeDecompiled);
};
class JSDecDecompiler : public Decompiler
{
Q_OBJECT
private:
RizinCmdTask *task;
public:
explicit JSDecDecompiler(QObject *parent = nullptr);
void decompileAt(RVA addr) override;
bool isRunning() override { return task != nullptr; }
static bool isAvailable();
};
#endif // DECOMPILER_H