ROSE  0.11.145.0
ByteCode/Cil.h
1 #ifndef ROSE_BinaryAnalysis_ByteCode_Cil_H
2 #define ROSE_BinaryAnalysis_ByteCode_Cil_H
3 #include <featureTests.h>
4 #ifdef ROSE_ENABLE_BINARY_ANALYSIS
5 
6 #include <Rose/BinaryAnalysis/ByteCode/Analysis.h>
7 
8 namespace Rose {
9 namespace BinaryAnalysis {
10 namespace ByteCode {
11 
12 class CilCode : public Code {
13 public:
14  virtual const uint8_t* bytes() const {
15  return bytes_; // UNIMPLEMENTED
16  }
17  virtual const size_t size() const {
18  return size_; // UNIMPLEMENTED
19  }
20  virtual const rose_addr_t offset() const {
21  return offset_; // UNIMPLEMENTED
22  }
23 
24  explicit CilCode(uint8_t* bytes, size_t size, rose_addr_t offset)
25  : bytes_{bytes}, size_{size}, offset_{offset} {
26  }
27 
28 private:
29  const uint8_t* bytes_;
30  size_t size_;
31  rose_addr_t offset_;
32 };
33 
34 class CilField : public Field {
35 public:
36  virtual const std::string name() const {
37  return "CilField::name():UNIMPLEMENTED";
38  }
39 
40  CilField() = delete;
41 
42 private:
43 };
44 
45 class CilMethod : public Method {
46 public:
47  virtual const std::string name() const override;
48  virtual const Code & code() const override;
49  virtual const void decode(const Disassembler::BasePtr &disassembler) const override;
50  virtual const SgAsmInstructionList* instructions() const override;
51 
52  virtual void annotate() override;
53 
54  static std::string name(const SgAsmCilMetadata*, SgAsmCilMetadataRoot*);
55 
56  CilMethod() = delete;
57  explicit CilMethod(SgAsmCilMetadataRoot*, SgAsmCilMethodDef*, rose_addr_t);
58 
59 private:
61  SgAsmCilMethodDef* sgMethod_;
62  SgAsmInstructionList* insns_;
63  CilCode code_;
64 };
65 
66 class CilInterface : public Interface {
67 public:
68  virtual const std::string name() const {
69  return "CilInterface::name():UNIMPLEMENTED";
70  }
71 
72  CilInterface() = delete;
73 
74 private:
75 };
76 
77 class CilAttribute : public Attribute {
78 public:
79  virtual const std::string name() const {
80  return "CilAttribute::name():UNIMPLEMENTED";
81  }
82 
83  CilAttribute() = delete;
84 
85 private:
86 };
87 
88 class CilClass : public Class {
89 public:
90  virtual const std::string name() const {
91  return "CilClass::name():UNIMPLEMENTED";
92  }
93  virtual const std::string super_name() const {
94  return "CilClass::super_name():UNIMPLEMENTED";
95  }
96  virtual const std::vector<std::string> &strings() {
97  return strings_;
98  }
99  virtual const std::vector<const Interface*> &interfaces() const {
100  return interfaces_;
101  }
102  virtual const std::vector<const Field*> &fields() const {
103  return fields_;
104  }
105  virtual const std::vector<const Method*> &methods() const {
106  return methods_;
107  }
108  virtual const std::vector<const Attribute*> &attributes() const {
109  return attributes_;
110  }
111 
112  virtual void dump();
113 
114  CilClass() = delete;
115  explicit CilClass(SgAsmCilMetadataRoot*, const std::uint8_t*, size_t, size_t);
116 
117 private:
118  std::vector<const Field*> fields_;
119  std::vector<const Method*> methods_;
120  std::vector<const Attribute*> attributes_;
121  std::vector<const Interface*> interfaces_;
122  std::vector<std::string> strings_;
123  const std::uint8_t* name_;
124  SgAsmCilMetadataRoot* mdr_;
125  SgAsmCilTypeDef* sgCilTypeDef_;
126 };
127 
128 class CilNamespace : public Namespace {
129 public:
130  virtual const std::string name() const;
131  virtual const std::vector<const Class*> &classes() const;
132 
133  void append(Class*);
134 
135  CilNamespace() = delete;
136  explicit CilNamespace(SgAsmCilMetadataRoot*, const std::uint8_t*);
137 
138 private:
139  std::vector<const Class*> classes_;
140  SgAsmCilMetadataRoot* mdr_;
141  const std::uint8_t* name_;
142 };
143 
144 class CilContainer : public Container {
145 public:
146  virtual const std::string name() const;
147  virtual const std::vector<const Namespace*> &namespaces() const;
148 
149  void printAssemblies(std::ostream& os) const;
150  void printMethods(std::ostream& os, size_t beg, size_t lim) const;
151  void printModules(std::ostream& os) const;
152  void printTypeDefs(std::ostream& os) const;
153 
155 
156  CilContainer() = delete;
158 
159 private:
160  std::vector<const Namespace*> namespaces_;
161  SgAsmCilMetadataRoot* mdr_;
162 };
163 
164 } // namespace
165 } // namespace
166 } // namespace
167 
168 #endif
169 #endif
Main namespace for the ROSE library.
CIL SgAsmCilMetadataRoot.
Base class for integer values.
CIL TypeDef node (II.22.37).
Base class for CIL branch of binary analysis IR nodes.
CIL MethodDef node (II.22.26).
List of SgAsmInstruction nodes.