JVM
javaclass.h
Go to the documentation of this file.
1 #ifndef JAVACLASSFILE_H
2 #define JAVACLASSFILE_H
3 
4 typedef struct JavaClass JavaClass;
5 
6 #include <stdio.h>
7 #include <stdint.h>
8 #include "constantpool.h"
9 #include "attributes.h"
10 #include "fields.h"
11 #include "methods.h"
12 
18 };
19 
21 
22  ACC_PUBLIC = 0x0001, // Class, Field, Method, InnerClass
23  ACC_PRIVATE = 0x0002, // Field, Method, InnerClass
24  ACC_PROTECTED = 0x0004, // Field, Method, InnerClass
25  ACC_STATIC = 0x0008, // Field, Method, InnerClass
26  ACC_FINAL = 0x0010, // Class, Field, Method, InnerClass
27  ACC_SUPER = 0x0020, // Class
28  ACC_SYNCHRONIZED = 0x0020, // Method
29  ACC_BRIDGE = 0x0040, // Method
30  ACC_VOLATILE = 0x0040, // Field
31  ACC_TRANSIENT = 0x0080, // Field
32  ACC_VARARGS = 0x0080, // Method
33  ACC_NATIVE = 0x0100, // Method
34  ACC_INTERFACE = 0x0200, // Class, InnerClass
35  ACC_ABSTRACT = 0x0400, // Class, Method, InnerClass
36  ACC_STRICT = 0x0800, // Method
37  ACC_SYNTHETIC = 0x1000, // Method
38 
40 
43 
47 
50 
51 };
52 
68 
73 
77 
85 
92 
94 };
95 
96 struct JavaClass {
97  // General
98  FILE* file;
101 
102  // Java Class Specification
106  uint16_t accessFlags;
107  uint16_t thisClass;
108  uint16_t superClass;
109  uint16_t interfaceCount;
110  uint16_t* interfaces;
111  uint16_t fieldCount;
113  uint16_t methodCount;
115  uint16_t attributeCount;
117 
118  // Class Data Info
121 
122  // Debug info
123  uint32_t totalBytesRead;
124  uint8_t lastTagRead;
131 
132 };
133 
134 void openClassFile(JavaClass* jc, const char* path);
135 void closeClassFile(JavaClass* jc);
136 const char* decodeJavaClassStatus(enum JavaClassStatus);
137 void decodeAccessFlags(uint16_t flags, char* buffer, int32_t buffer_len, enum AccessFlagsType acctype);
138 
140 void printClassFileInfo(JavaClass* jc);
141 
142 #endif // JAVACLASSFILE_H
Definition: javaclass.h:91
method_info * methods
Definition: javaclass.h:114
Definition: javaclass.h:30
Definition: javaclass.h:84
Definition: javaclass.h:93
Definition: javaclass.h:22
Definition: javaclass.h:62
Definition: javaclass.h:78
Definition: javaclass.h:58
Definition: javaclass.h:71
uint32_t totalBytesRead
Definition: javaclass.h:123
field_info * fields
Definition: javaclass.h:112
Definition: javaclass.h:27
int32_t methodEntriesRead
Definition: javaclass.h:128
Definition: javaclass.h:15
Definition: javaclass.h:34
Definition: javaclass.h:23
uint16_t fieldCount
Definition: javaclass.h:111
uint16_t accessFlags
Definition: javaclass.h:106
uint16_t superClass
Definition: javaclass.h:108
Definition: javaclass.h:63
JavaClassStatus
Definition: javaclass.h:53
Definition: javaclass.h:17
uint16_t majorVersion
Definition: javaclass.h:103
Definition: javaclass.h:59
Definition: javaclass.h:76
uint16_t attributeCount
Definition: javaclass.h:115
Definition: javaclass.h:16
enum JavaClassStatus status
Definition: javaclass.h:99
Definition: attributes.h:9
Definition: javaclass.h:66
Definition: javaclass.h:79
int32_t constantPoolEntriesRead
Definition: javaclass.h:125
Definition: constantpool.h:9
uint8_t lastTagRead
Definition: javaclass.h:124
uint16_t * interfaces
Definition: javaclass.h:110
Definition: javaclass.h:86
Definition: javaclass.h:80
Definition: javaclass.h:89
Definition: fields.h:10
Definition: javaclass.h:82
uint16_t interfaceCount
Definition: javaclass.h:109
Definition: javaclass.h:41
Definition: javaclass.h:87
attribute_info * attributes
Definition: javaclass.h:116
int32_t validityEntriesChecked
Definition: javaclass.h:130
Definition: javaclass.h:37
Definition: javaclass.h:54
Definition: javaclass.h:61
Definition: javaclass.h:55
Definition: javaclass.h:33
void printClassFileDebugInfo(JavaClass *jc)
Definition: javaclass.h:70
Definition: javaclass.h:81
Definition: javaclass.h:35
Definition: javaclass.h:36
uint16_t thisClass
Definition: javaclass.h:107
Definition: javaclass.h:72
Definition: javaclass.h:65
Definition: javaclass.h:31
Definition: javaclass.h:25
void closeClassFile(JavaClass *jc)
Closes the .class file and releases resources used by the JavaClass struct.
Definition: javaclass.c:290
uint16_t staticFieldCount
Definition: javaclass.h:119
Definition: javaclass.h:69
uint16_t constantPoolCount
Definition: javaclass.h:104
FILE * file
Definition: javaclass.h:98
uint16_t minorVersion
Definition: javaclass.h:103
Definition: javaclass.h:29
Definition: javaclass.h:67
Definition: javaclass.h:39
Definition: javaclass.h:48
Definition: javaclass.h:88
Definition: javaclass.h:28
int32_t attributeEntriesRead
Definition: javaclass.h:129
Definition: javaclass.h:26
void printClassFileInfo(JavaClass *jc)
Definition: javaclass.h:75
Definition: javaclass.h:74
void openClassFile(JavaClass *jc, const char *path)
Opens a class file and parse it, storing the class information in the JavaClass structure.
Definition: javaclass.c:23
Definition: javaclass.h:24
uint8_t classNameMismatch
Definition: javaclass.h:100
const char * decodeJavaClassStatus(enum JavaClassStatus)
Decodes JavaClassStatus enumeration elements.
Definition: javaclass.c:357
void decodeAccessFlags(uint16_t flags, char *buffer, int32_t buffer_len, enum AccessFlagsType acctype)
Given flags of a certain method/field/class, this class will convert the bits to a string telling whi...
Definition: javaclass.c:420
Definition: javaclass.h:96
Definition: javaclass.h:57
Definition: javaclass.h:56
int32_t interfaceEntriesRead
Definition: javaclass.h:126
Definition: javaclass.h:83
Definition: javaclass.h:32
uint16_t methodCount
Definition: javaclass.h:113
Definition: javaclass.h:14
Definition: javaclass.h:44
Definition: javaclass.h:60
int32_t fieldEntriesRead
Definition: javaclass.h:127
cp_info * constantPool
Definition: javaclass.h:105
AccessFlags
Definition: javaclass.h:20
Definition: methods.h:10
Definition: javaclass.h:64
AccessFlagsType
Definition: javaclass.h:13
uint16_t instanceFieldCount
Definition: javaclass.h:120