diff options
Diffstat (limited to 'includes/mipsdis.h')
-rw-r--r-- | includes/mipsdis.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/includes/mipsdis.h b/includes/mipsdis.h new file mode 100644 index 0000000..5ce2506 --- /dev/null +++ b/includes/mipsdis.h @@ -0,0 +1,54 @@ +#ifndef __MIPSDIS_H__ +#define __MIPSDIS_H__ +#include <Exceptions.h> +#include <queue> +#include "mipsmem.h" + +class TDis : public Base { + public: + TDis(mipsmem *); + virtual mipsmem * getmem(); + virtual void add_branch(Uint32); + virtual void add_jump(Uint32); + virtual void add_function(Uint32); + virtual void SetTag(Uint32, int, bool); + virtual void Name(const String &); + virtual void PushGPReg(int); + virtual void PushCPReg(int); + virtual void PushImm(Uint32); + virtual void PushTarget(Uint32); + virtual void PushSa(Uint32); + virtual void PushOfB(int reg, Uint32, int); + virtual void PushOffset(Uint32); + virtual void PushFull(Uint32); + virtual void Invalid(); + virtual void Suspect(); + virtual void Comment(const String &); + + virtual void reset(); + + bool invalid; + std::priority_queue<int, std::vector<int>, std::greater<int> > bheap; + std::priority_queue<int, std::vector<int>, std::greater<int> > jheap; + std::priority_queue<int, std::vector<int>, std::greater<int> > fheap; + + Uint32 pc; + private: + mipsmem * mm; +}; + +class Disassembler : public Base { + public: + Disassembler(mipsmem *); + virtual ~Disassembler(); + void mainloop(); + void crawl_code(Uint32 = 0xffffffff); + private: + mipsmem * mm; + TDis * dis; + bool started; + bool infunction; +}; + + +#endif |