ROSE  0.11.131.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;
48  virtual const Code & code() const;
49  virtual const void decode(const Disassembler::BasePtr &disassembler) const;
50  virtual const SgAsmInstructionList* instructions() const;
51 
52  CilMethod() = delete;
53  explicit CilMethod(SgAsmCilMethodDef*);
54 
55 private:
56  SgAsmCilMethodDef* sgMethod_;
57  SgAsmInstructionList* insns_;
58  CilCode code_;
59 };
60 
61 class CilInterface : public Interface {
62 public:
63  virtual const std::string name() const {
64  return "CilInterface::name():UNIMPLEMENTED";
65  }
66 
67  CilInterface() = delete;
68 
69 private:
70 };
71 
72 class CilAttribute : public Attribute {
73 public:
74  virtual const std::string name() const {
75  return "CilAttribute::name():UNIMPLEMENTED";
76  }
77 
78  CilAttribute() = delete;
79 
80 private:
81 };
82 
83 class CilClass : public Class {
84 public:
85  virtual const std::string name() const {
86  return "CilClass::name():UNIMPLEMENTED";
87  }
88  virtual const std::string super_name() const {
89  return "CilClass::super_name():UNIMPLEMENTED";
90  }
91  virtual const std::vector<std::string> &strings() {
92  return strings_;
93  }
94  virtual const std::vector<const Interface*> &interfaces() const {
95  return interfaces_;
96  }
97  virtual const std::vector<const Field*> &fields() const {
98  return fields_;
99  }
100  virtual const std::vector<const Method*> &methods() const {
101  return methods_;
102  }
103  virtual const std::vector<const Attribute*> &attributes() const {
104  return attributes_;
105  }
106 
107  CilClass() = delete;
108  explicit CilClass(SgAsmCilMetadataRoot*, const std::uint8_t*, size_t, size_t);
109 
110 private:
111  std::vector<const Field*> fields_;
112  std::vector<const Method*> methods_;
113  std::vector<const Attribute*> attributes_;
114  std::vector<const Interface*> interfaces_;
115  std::vector<std::string> strings_;
116  const std::uint8_t* name_;
117  SgAsmCilMetadataRoot* mdr_;
118  SgAsmCilTypeDef* sgCilTypeDef_;
119 };
120 
121 class CilNamespace : public Namespace {
122 public:
123  virtual const std::string name() const;
124  virtual const std::vector<const Class*> &classes() const;
125 
126  void append(Class*);
127 
128  CilNamespace() = delete;
129  explicit CilNamespace(SgAsmCilMetadataRoot*, const std::uint8_t*);
130 
131 private:
132  std::vector<const Class*> classes_;
133  SgAsmCilMetadataRoot* mdr_;
134  const std::uint8_t* name_;
135 };
136 
137 class CilContainer : public Container {
138 public:
139  virtual const std::string name() const;
140  virtual const std::vector<const Namespace*> &namespaces() const;
141 
142  void printAssemblies(std::ostream& os) const;
143  void printMethods(std::ostream& os, size_t beg, size_t lim) const;
144  void printModules(std::ostream& os) const;
145  void printTypeDefs(std::ostream& os) const;
146 
147  CilContainer() = delete;
149 
150 private:
151  std::vector<const Namespace*> namespaces_;
152  SgAsmCilMetadataRoot* mdr_;
153 };
154 
155 } // namespace
156 } // namespace
157 } // namespace
158 
159 #endif
160 #endif
Main namespace for the ROSE library.
CIL SgAsmCilMetadataRoot.
CIL TypeDef node.
CIL MethodDef node.
List of SgAsmInstruction nodes.