ROSE 2.9.0
Loading...
Searching...
No Matches
Rose/BinaryAnalysis/ByteCode/Jvm.h
1#ifndef ROSE_BinaryAnalysis_ByteCode_Jvm_H
2#define ROSE_BinaryAnalysis_ByteCode_Jvm_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_BINARY_ANALYSIS
5
6#include <Rose/BinaryAnalysis/InstructionSemantics/BaseSemantics/BasicTypes.h>
7#include <Rose/BinaryAnalysis/ByteCode/Analysis.h>
8
10class SgAsmJvmField;
12class SgAsmJvmMethod;
14
15namespace Rose {
16namespace BinaryAnalysis {
17namespace ByteCode {
18
19class JvmCode final : public Code {
20 public:
23
25 static Ptr instance(uint8_t* bytes, size_t size, Address offset);
26
27 public:
28 const uint8_t* bytes() const override;
29 size_t size() const override;
30 Address offset() const override;
31
32 void bytes(const uint8_t* buf);
33 void size(size_t sz);
34 void offset(Address off);
35
36 JvmCode(uint8_t* bytes, size_t size, Address offset);
37
38 private:
39 const uint8_t* bytes_;
40 size_t size_;
41 Address offset_;
42};
43
44class JvmField final : public Field {
45 public:
48
51
52 public:
53 std::string name() const override;
54
55 JvmField() = delete;
57
58 private:
60 SgAsmJvmField* sgField_;
61};
62
63class JvmMethod final : public Method {
64 public:
67
70
72
73 std::string name() const override;
74 bool isSystemReserved(const std::string &name) const override;
75
76 const Code & code() const override;
77 const SgAsmInstructionList* instructions() const override;
78 void decode(const Disassembler::BasePtr &disassembler) const override;
79
80 void annotate() override;
81
82 bool isStatic() const;
83 std::string descriptor() const;
84
85 JvmMethod() = delete;
87
88 private:
90 SgAsmJvmMethod* sgMethod_;
91 JvmCode code_;
92};
93
94class JvmInterface final : public Interface {
95public:
98
100 static Ptr instance(SgAsmJvmFileHeader* jfh, uint16_t index);
101
102 std::string name() const override;
103 uint16_t index() const;
104
105 JvmInterface() = delete;
106 JvmInterface(SgAsmJvmFileHeader* jfh, uint16_t index);
107
108 private:
109 SgAsmJvmFileHeader* jfh_;
110 uint16_t index_;
111};
112
113class JvmAttribute final : public Attribute {
114 public:
117
119 static Ptr instance(SgAsmJvmFileHeader* jfh, uint16_t index);
120
121 std::string name() const override;
122 uint16_t index() const;
123
124 JvmAttribute() = delete;
125 JvmAttribute(SgAsmJvmFileHeader* jfh, uint16_t index);
126
127 private:
128 SgAsmJvmFileHeader* jfh_;
129 uint16_t index_;
130};
131
132class JvmClass final : public Class {
133 public:
136
139
140 JvmClass::Ptr promote(const Sawyer::SharedPointer<Class>& from);
141
143 static std::string name(uint16_t index, const SgAsmJvmConstantPool*);
144
145 std::string name() const override;
146 std::string super_name() const override;
147 std::string typeSeparator() const override;
148 void dump() override;
149
150 const std::vector<std::string>& strings() override;
151 SgAsmJvmConstantPool* constant_pool();
152
153 JvmClass() = delete;
155
156 private:
157 SgAsmJvmFileHeader* jfh_;
158};
159
160class JvmContainer final : public Container {
161 public:
162 std::string name() const override;
163 bool isSystemReserved(const std::string &name) const override;
164 static bool isJvmSystemReserved(const std::string &name);
165};
166
167} // namespace
168} // namespace
169} // namespace
170
171#endif
172#endif
static Ptr instance(SgAsmJvmFileHeader *jfh, uint16_t index)
Allocating constructor.
static std::string name(uint16_t index, const SgAsmJvmConstantPool *)
The string found at the given index into the constant pool.
static Ptr instance(NamespacePtr &ns, SgAsmJvmFileHeader *jfh)
Allocating constructor.
static Ptr instance(uint8_t *bytes, size_t size, Address offset)
Allocating constructor.
static Ptr instance(SgAsmJvmFileHeader *jfh, SgAsmJvmField *fld)
Allocating constructor.
static Ptr instance(SgAsmJvmFileHeader *jfh, uint16_t index)
Allocating constructor.
static Ptr instance(SgAsmJvmFileHeader *, SgAsmJvmMethod *, Address)
Allocating constructor.
Reference-counting intrusive smart pointer.
List of SgAsmInstruction nodes.
Represents an JVM constant pool.
Represents the file header of an JVM binary container.
std::uint64_t Address
Address.
Definition Address.h:11
The ROSE library.