ROSE 2.9.0
Loading...
Searching...
No Matches
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
13
14namespace Rose {
15namespace BinaryAnalysis {
16namespace ByteCode {
17
18class CilCode final : public Code {
19 public:
22
23 public:
24 const uint8_t* bytes() const override;
25 size_t size() const override;
26 Address offset() const override;
27
28 CilCode(uint8_t* bytes, size_t size, Address offset);
29
30 private:
31 const uint8_t* bytes_;
32 size_t size_;
33 Address offset_;
34};
35
36class CilField final : public Field {
37 public:
40
41 public:
42 std::string name() const override;
43 CilField() = delete;
44};
45
46class CilMethod final : public Method {
47 public:
50
53
54 public:
55 std::string name() const override;
56 bool isSystemReserved(const std::string &name) const override;
57
58 const Code & code() const override;
59 const SgAsmInstructionList* instructions() const override;
60 void decode(const Disassembler::BasePtr &disassembler) const override;
61
62 void annotate() override;
63
64 CilMethod() = delete;
66
67 private:
69 SgAsmCilMethodDef* sgMethod_;
71 CilCode code_;
72};
73
74class CilInterface final : public Interface {
75 public:
76 std::string name() const override;
77 CilInterface() = delete;
78};
79
80class CilAttribute final : public Attribute {
81 public:
82 std::string name() const override;
83 CilAttribute() = delete;
84};
85
86class CilClass final : public Class {
87 public:
90
92 static Ptr instance(NamespacePtr& ns, SgAsmCilMetadataRoot*, const std::string &, size_t, size_t);
93
94 static Class::Ptr promote(const Sawyer::SharedPointer<Class>& from);
95 static std::string objectName(const SgAsmCilMetadata*, SgAsmCilMetadataRoot*);
96
97 std::string name() const override;
98 std::string super_name() const override;
99 std::string typeSeparator() const override;
100 void dump() override;
101
102 CilClass() = delete;
103 CilClass(NamespacePtr& ns, SgAsmCilMetadataRoot*, const std::string &, size_t, size_t);
104
105private:
106 std::string name_;
108 //WARNING: not used yet!
109 //SgAsmCilTypeDef* sgCilTypeDef_;
110};
111
112class CilNamespace final : public Namespace {
113public:
116
117 std::string name() const override;
118
120 static Ptr instance(SgAsmCilMetadataRoot*, const std::string &);
121
122 CilNamespace() = delete;
123 CilNamespace(SgAsmCilMetadataRoot*, const std::string &);
124
125private:
126 //WARNING: not used yet!
127 //SgAsmCilMetadataRoot* mdr_;
128 std::string name_;
129};
130
131class CilContainer final : public Container {
132 public:
135
136 public:
137 std::string name() const override;
138 bool isSystemReserved(const std::string &name) const override;
139 static bool isCilSystemReserved(const std::string &name);
140
141 void printAssemblies(std::ostream& os) const;
142 void printMethods(std::ostream& os, size_t beg, size_t lim) const;
143 void printModules(std::ostream& os) const;
144 void printTypeDefs(std::ostream& os) const;
145
147
148 CilContainer() = delete;
150
151 private:
153};
154
155} // namespace
156} // namespace
157} // namespace
158
159#endif
160#endif
static Ptr instance(NamespacePtr &ns, SgAsmCilMetadataRoot *, const std::string &, size_t, size_t)
Allocating constructor.
static Ptr instance(SgAsmCilMetadataRoot *, SgAsmCilMethodDef *, Address)
Allocating constructor.
static Ptr instance(SgAsmCilMetadataRoot *, const std::string &)
Allocating constructor.
Reference-counting intrusive smart pointer.
CIL SgAsmCilMetadataRoot.
Base class for CIL branch of binary analysis IR nodes.
CIL MethodDef node (II.22.26).
List of SgAsmInstruction nodes.
Base class for integer values.
std::uint64_t Address
Address.
Definition Address.h:11
The ROSE library.