ROSE  0.11.137.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;
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  CilClass() = delete;
113  explicit CilClass(SgAsmCilMetadataRoot*, const std::uint8_t*, size_t, size_t);
114 
115 private:
116  std::vector<const Field*> fields_;
117  std::vector<const Method*> methods_;
118  std::vector<const Attribute*> attributes_;
119  std::vector<const Interface*> interfaces_;
120  std::vector<std::string> strings_;
121  const std::uint8_t* name_;
122  SgAsmCilMetadataRoot* mdr_;
123  SgAsmCilTypeDef* sgCilTypeDef_;
124 };
125 
126 class CilNamespace : public Namespace {
127 public:
128  virtual const std::string name() const;
129  virtual const std::vector<const Class*> &classes() const;
130 
131  void append(Class*);
132 
133  CilNamespace() = delete;
134  explicit CilNamespace(SgAsmCilMetadataRoot*, const std::uint8_t*);
135 
136 private:
137  std::vector<const Class*> classes_;
138  SgAsmCilMetadataRoot* mdr_;
139  const std::uint8_t* name_;
140 };
141 
142 class CilContainer : public Container {
143 public:
144  virtual const std::string name() const;
145  virtual const std::vector<const Namespace*> &namespaces() const;
146 
147  void printAssemblies(std::ostream& os) const;
148  void printMethods(std::ostream& os, size_t beg, size_t lim) const;
149  void printModules(std::ostream& os) const;
150  void printTypeDefs(std::ostream& os) const;
151 
153 
154  CilContainer() = delete;
156 
157 private:
158  std::vector<const Namespace*> namespaces_;
159  SgAsmCilMetadataRoot* mdr_;
160 };
161 
162 } // namespace
163 } // namespace
164 } // namespace
165 
166 #endif
167 #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.