ROSE 2.15.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 CilField final : public Field {
19 public:
22
23 public:
24 std::string name() const override;
25 CilField() = delete;
26};
27
28class CilMethod final : public Method {
29 public:
32
35
36 public:
37 bool isStatic() const override;
38 bool isSystemReserved(const std::string &name) const override;
39
40 const SgAsmInstructionList* instructions() const override;
41 void decode(const Disassembler::BasePtr &disassembler) const override;
42
43 std::string descriptor() const override;
44
45 void annotate() override;
46
47 CilMethod() = delete;
49
50 private:
51 SgAsmCilMetadataRoot* mdr_ = nullptr;
52 SgAsmCilMethodDef* sgMethod_ = nullptr;
53 SgAsmInstructionList* insns_ = nullptr;
54};
55
56class CilInterface final : public Interface {
57 public:
58 std::string name() const override;
59 CilInterface() = delete;
60};
61
62class CilAttribute final : public Attribute {
63 public:
64 std::string name() const override;
65 CilAttribute() = delete;
66};
67
68class CilClass final : public Class {
69 public:
72
74 static Ptr instance(std::string name, NamespacePtr ns, SgAsmCilMetadataRoot*, size_t, size_t);
75
76 static Class::Ptr promote(const Sawyer::SharedPointer<Class>& from);
77 static std::string objectName(const SgAsmCilMetadata*, SgAsmCilMetadataRoot*);
78
79 std::string typeSeparator() const override;
80 void dump() override;
81
82 CilClass() = delete;
83 CilClass(std::string name, NamespacePtr ns, SgAsmCilMetadataRoot*, size_t, size_t);
84
85private:
87 //WARNING: not used yet!
88 //SgAsmCilTypeDef* sgCilTypeDef_;
89};
90
91class CilNamespace final : public Namespace {
92public:
95
96 std::string name() const override;
97
99 static Ptr instance(SgAsmCilMetadataRoot*, const std::string &);
100
101 CilNamespace() = delete;
102 CilNamespace(SgAsmCilMetadataRoot*, const std::string &);
103
104private:
105 //WARNING: not used yet!
106 //SgAsmCilMetadataRoot* mdr_;
107 std::string name_;
108};
109
110class CilContainer final : public Container {
111 public:
114
115 public:
116 std::string name() const override;
117 bool isSystemReserved(const std::string &name) const override;
118 static bool isCilSystemReserved(const std::string &name);
119
120 void printAssemblies(std::ostream& os) const;
121 void printMethods(std::ostream& os, size_t beg, size_t lim) const;
122 void printModules(std::ostream& os) const;
123 void printTypeDefs(std::ostream& os) const;
124
126
127 CilContainer() = delete;
129
130 private:
132};
133
134} // namespace
135} // namespace
136} // namespace
137
138#endif
139#endif
static Ptr instance(std::string name, NamespacePtr ns, SgAsmCilMetadataRoot *, size_t, size_t)
Allocating constructor.
static Ptr instance(std::string name, Address, SgAsmCilMetadataRoot *, SgAsmCilMethodDef *)
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.