ROSE  0.11.145.0
Rose/BinaryAnalysis/Disassembler/Jvm.h
1 #ifndef ROSE_BinaryAnalysis_Disassembler_Jvm_H
2 #define ROSE_BinaryAnalysis_Disassembler_Jvm_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 Jvm: public Base {
19 public:
22 
24  // Constructors
26 protected:
27  // Default constructor for serialization
28  Jvm();
29 
30 public:
32  static Ptr instance();
33 
34  virtual ~Jvm();
35 
36  virtual Base::Ptr clone() const override;
37 
39  // Public methods
41 public:
42  virtual bool canDisassemble(SgAsmGenericHeader*) const override;
43 
44  virtual Unparser::BasePtr unparser() const override;
45 
46  virtual SgAsmInstruction* disassembleOne(const MemoryMap::Ptr&, rose_addr_t va,
47  AddressSet* successors=nullptr) override;
48 
50 
51 private:
52  size_t appendTableswitch(const MemoryMap::Ptr &map, rose_addr_t start,
53  SgUnsignedCharList &chars, SgAsmOperandList* operands);
54  size_t appendLookupswitch(const MemoryMap::Ptr &map, rose_addr_t start,
55  SgUnsignedCharList &chars, SgAsmOperandList* operands);
56  template <class T>
57  size_t appendOperand(const MemoryMap::Ptr &map, rose_addr_t va,
58  SgUnsignedCharList &chars, SgAsmOperandList* operands);
59 
60  /* beginning offset to code segment being processed */
61  rose_addr_t codeOffset_;
62 
63 public:
64  rose_addr_t codeOffset();
65  void codeOffset(rose_addr_t offset);
66 
68  // Serialization
70 #ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
71 private:
72  friend class boost::serialization::access;
73 
74  template<class S>
75  void serialize(S &s, const unsigned /*version*/) {
76  s & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Disassembler::Base);
77  }
78 #endif
79 };
80 
81 } // namespace
82 } // namespace
83 } // namespace
84 
85 #endif
86 #endif
static Ptr instance()
Allocating constructor.
Base class for machine instructions.
virtual Base::Ptr clone() const override
Creates a new copy of a disassembler.
Main namespace for the ROSE library.
Base class for container file headers.
List of operands for an instruction.
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 Unparser::BasePtr unparser() const override
Unparser.
virtual bool canDisassemble(SgAsmGenericHeader *) const override
Predicate determining the suitability of a disassembler for a specific file header.
Virtual base class for instruction disassemblers.
virtual SgAsmInstruction * makeUnknownInstruction(const Disassembler::Exception &) override
Makes an unknown instruction from an exception.