-#include "include.hxx"
+#ifndef INCLUDE__Binary_hxx
+#define INCLUDE__Binary_hxx
+
+#include "include_llvm.hxx"
+#include "Section.hxx"
#include <string>
+#include <vector>
+#include <functional>
using llvm::OwningPtr;
class Binary {
+public:
+ Binary(const std::string& filename);
+
+ void disassemble();
+
+ void disassemble_functions();
+
+ void disassemble_cfg();
+
+ std::vector<std::string> getSymbols();
+
+ std::vector<std::string> getFunctions();
+ void for_each_instruction(const std::string& function, std::function<void (long, std::string, std::string)> callback);
+
private:
llvm::Triple triple;
const llvm::Target * target;
llvm::object::ObjectFile * o;
- OwningPtr<llvm::object::Binary> binary;
+ llvm::object::Binary* binary;
OwningPtr<const llvm::MCRegisterInfo> MRI;
OwningPtr<const llvm::MCAsmInfo> AsmInfo;
OwningPtr<llvm::MCModule> Mod;
OwningPtr<const llvm::MCInstrInfo> MII;
OwningPtr<llvm::MCRelocationInfo> RelInfo;
OwningPtr<llvm::MCSymbolizer> Symzer;
-public:
- Binary(const std::string& filename);
-
- void disassemble();
- void disassemble_functions();
+ std::map<std::string, llvm::object::SectionRef> sections;
+ std::map<std::string, llvm::object::SymbolRef> symbols;
};
+#endif