ROSE 2.20.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 qualifiedName() const override;
80 std::string typeSeparator() const override;
81
82 void dump() override;
83
84 CilClass() = delete;
85 CilClass(std::string name, NamespacePtr ns, SgAsmCilMetadataRoot*, size_t, size_t);
86
87private:
89 //WARNING: not used yet!
90 //SgAsmCilTypeDef* sgCilTypeDef_;
91};
92
93class CilNamespace final : public Namespace {
94public:
97
99 static Ptr instance(const std::string, ContainerPtr, SgAsmCilMetadataRoot*);
100
101 ~CilNamespace() = default;
102 CilNamespace() = delete;
103
104private:
105 CilNamespace(const std::string, ContainerPtr, SgAsmCilMetadataRoot*);
106 [[maybe_unused]] SgAsmCilMetadataRoot* mdr_;
107};
108
109class CilContainer final : public Container {
110 public:
113
115 static Ptr instance(std::string name, SgAsmCilMetadataRoot* mdr);
116
117 ~CilContainer() = default;
118 CilContainer() = delete;
119
120 public:
121 std::string name() const override;
122 bool isSystemReserved(const std::string &name) const override;
123 static bool isCilSystemReserved(const std::string &name);
124
125 void printAssemblies(std::ostream& os) const;
126 void printMethods(std::ostream& os, size_t beg, size_t lim) const;
127 void printModules(std::ostream& os) const;
128 void printTypeDefs(std::ostream& os) const;
129
131
132 private:
133 explicit CilContainer(std::string name, SgAsmCilMetadataRoot* mdr);
135};
136
137} // namespace
138} // namespace
139} // namespace
140
141#endif
142#endif
static Ptr instance(std::string name, NamespacePtr ns, SgAsmCilMetadataRoot *, size_t, size_t)
Allocating constructor.
static Ptr instance(std::string name, SgAsmCilMetadataRoot *mdr)
Allocating constructor.
static Ptr instance(std::string name, Address, SgAsmCilMetadataRoot *, SgAsmCilMethodDef *)
Allocating constructor.
static Ptr instance(const std::string, ContainerPtr, SgAsmCilMetadataRoot *)
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.