ROSE  0.11.145.0
Disassembler/Cil.h
1 #ifndef ROSE_BinaryAnalysis_Disassembler_Cil_H
2 #define ROSE_BinaryAnalysis_Disassembler_Cil_H
3 #include <featureTests.h>
4 #ifdef ROSE_ENABLE_BINARY_ANALYSIS
5 
6 #include <Rose/BinaryAnalysis/Disassembler/Base.h>
7 #include <boost/serialization/access.hpp>
8 #include <boost/serialization/base_object.hpp>
9 
10 namespace Rose {
11 namespace BinaryAnalysis {
12 namespace Disassembler {
13 
18 class Cil: public Base {
19 public:
22 
24  // Constructors
26 protected:
27  Cil();
28 
29 public:
31  static Ptr instance();
32 
33  virtual ~Cil();
34 
35  virtual Base::Ptr clone() const override;
36 
38  // Public methods
40 public:
41  virtual bool canDisassemble(SgAsmGenericHeader*) const override;
42 
43  virtual Unparser::BasePtr unparser() const override;
44 
45  virtual SgAsmInstruction* disassembleOne(const MemoryMap::Ptr&, rose_addr_t va,
46  AddressSet* successors=nullptr) override;
47 
49 
50 private:
51  SgAsmCilInstruction* makeUnknownInstruction(rose_addr_t va, SgUnsignedCharList &bytes, size_t size);
52  SgAsmCilInstruction* makeInstruction(rose_addr_t, SgUnsignedCharList& bytes/*in,out*/, size_t, CilInstructionKind,
53  const std::string&, SgAsmExpression* operand=nullptr) const;
54 
56  // Serialization
58 #ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
59 private:
60  friend class boost::serialization::access;
61 
62  template<class S>
63  void serialize(S &s, const unsigned /*version*/) {
64  s & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Disassembler::Base);
65  }
66 #endif
67 };
68 
69 } // namespace
70 } // namespace
71 } // namespace
72 
73 #endif
74 #endif
virtual Base::Ptr clone() const override
Creates a new copy of a disassembler.
Base class for machine instructions.
virtual bool canDisassemble(SgAsmGenericHeader *) const override
Predicate determining the suitability of a disassembler for a specific file header.
CilInstructionKind
CIL instruction types.
Main namespace for the ROSE library.
Base class for container file headers.
Base class for expressions.
virtual Unparser::BasePtr unparser() const override
Unparser.
virtual SgAsmInstruction * makeUnknownInstruction(const Disassembler::Exception &) override
Makes an unknown instruction from an exception.
static Ptr instance()
Allocating constructor.
virtual SgAsmInstruction * disassembleOne(const MemoryMap::Ptr &, rose_addr_t va, AddressSet *successors=nullptr) override
This is the lowest level disassembly function and is implemented in the architecture-specific subclas...
Virtual base class for instruction disassemblers.