2#include <Cyrus/shared.h>
7#include <nlohmann/json.hpp>
11using namespace nlohmann;
72 std::string
note = std::string(this->note);
82 j[
"dynamic"] = dynamic;
89 j[
"enumValueCount"] = enumItemCount;
92 j[
"enumValues"].push_back(
93 json({{
"name", enumVal->name}, {
"value", enumVal->value}}));
100DEFINE_OFFSET_AND_STATIC_ASSERT(
ClassProperty, descriptor, 0x38);
101DEFINE_OFFSET_AND_STATIC_ASSERT(
ClassProperty, containerStorage, 0x40);
102DEFINE_OFFSET_AND_STATIC_ASSERT(
ClassProperty, propertyID, 0x50);
107DEFINE_OFFSET_AND_STATIC_ASSERT(
ClassProperty, storage, 0x70);
146 j[
"returnType"] =
"void";
154 j[
"argCount"] = (args->
end - args->
start) / 0x8;
157 j[
"args"].push_back(parentType +
" *self");
158 for (
auto i = args->
start; i < args->
end; i += 0x8) {
160 j[
"args"].push_back(arg->typeName +
" a" +
161 std::to_string((i - args->
start) / 0x8));
165 reinterpret_cast<uintptr_t
>(GetModuleHandleA(0));
196 auto cSupper =
super;
199 j[
"allSuperClasses"].push_back(cSupper->classTypeStorage->typeName);
200 cSupper = cSupper->super;
203 for (
auto i = 0; i <
properties.size(); i += 2) {
205 j[
"properties"].push_back(prop->serialize());
208 for (
auto i = 0; i <
functions.size(); i += 2) {
220DEFINE_OFFSET_AND_STATIC_ASSERT(
ClassDescriptor, classTypeStorage, 0x20);
226 std::vector<ClassDescriptor *> wizClasses;
227 uintptr_t base =
reinterpret_cast<uintptr_t
>(GetModuleHandleA(
nullptr));
228 uintptr_t superClassDescriptor =
229 *
reinterpret_cast<uintptr_t *
>(base + 0x347F018);
231 const auto wizClassDescriptorEnd =
232 *
reinterpret_cast<uintptr_t *
>(superClassDescriptor);
233 auto currentClassDescriptor =
234 *
reinterpret_cast<uintptr_t *
>(wizClassDescriptorEnd);
237 while (currentClassDescriptor != wizClassDescriptorEnd) {
238 auto classDataPointer =
239 *
reinterpret_cast<uintptr_t *
>(currentClassDescriptor + 0x28);
240 auto classAttributePointer =
241 *
reinterpret_cast<uintptr_t *
>(currentClassDescriptor + 0x10);
242 if (*
reinterpret_cast<uint8_t *
>(classAttributePointer + 0x19)) {
243 auto linkedDescriptor =
244 *
reinterpret_cast<uintptr_t *
>(currentClassDescriptor + 0x8);
245 for (; !*
reinterpret_cast<uint8_t *
>(linkedDescriptor + 0x19);
247 *
reinterpret_cast<uintptr_t *
>(linkedDescriptor + 0x8)) {
248 if (currentClassDescriptor !=
249 *
reinterpret_cast<uintptr_t *
>(linkedDescriptor + 0x10)) {
252 currentClassDescriptor = linkedDescriptor;
254 currentClassDescriptor = linkedDescriptor;
256 currentClassDescriptor =
257 *
reinterpret_cast<uintptr_t *
>(currentClassDescriptor + 0x10);
258 for (
auto linkedDescriptor =
259 *
reinterpret_cast<uintptr_t *
>(classAttributePointer);
260 !*
reinterpret_cast<uint8_t *
>(linkedDescriptor + 0x19);
262 *
reinterpret_cast<uintptr_t *
>(linkedDescriptor)) {
263 currentClassDescriptor = linkedDescriptor;
266 auto currentClass = *
reinterpret_cast<uintptr_t *
>(classDataPointer + 0x90);
268 !*
reinterpret_cast<uint8_t *
>(classDataPointer + 0x88)) {
269 wizClasses.push_back(
reinterpret_cast<ClassDescriptor *
>(currentClass));
275 for (
auto wizClass : wizClasses) {
276 if (wizClass ==
nullptr) {
279 classes.push_back(wizClass->serialize());
281 std::ofstream file(
"classes.json");
282 if (file.is_open()) {
283 auto classesJson =
classes.dump(4);
287 std::cout <<
"Unable to open classes file for writing" << std::endl;
Definition ClassDump.h:23
virtual char * getStorage()
virtual int getElements(bool a)
virtual void * constructor()
Definition ClassDump.h:170
json serialize()
Definition ClassDump.h:184
std::vector< ClassProperty * > properties
Definition ClassDump.h:178
uint32_t m_offset
Definition ClassDump.h:173
virtual ~ClassDescriptor()=default
uintptr_t unk1
Definition ClassDump.h:172
uint8_t padd[0x30]
Definition ClassDump.h:177
ClassDescriptor * super
Definition ClassDump.h:175
std::vector< ClassFunction * > functions
Definition ClassDump.h:179
ClassTypeStorage * classTypeStorage
Definition ClassDump.h:176
uint32_t unk2
Definition ClassDump.h:174
Definition ClassDump.h:34
std::string name
Definition ClassDump.h:38
std::string value
Definition ClassDump.h:36
void * pad
Definition ClassDump.h:37
Definition ClassDump.h:127
virtual ~ClassFunction()=default
json serialize(std::string parentType)
Definition ClassDump.h:134
Definition ClassDump.h:118
uintptr_t fnAdress
Definition ClassDump.h:121
virtual ClassTypeStorage * getReturnType()=0
virtual bool getArgsData(ArgStuff *out)=0
uint8_t pad[0x28]
Definition ClassDump.h:120
Definition ClassDump.h:41
uint32_t offset
Definition ClassDump.h:50
ClassContainerStorage * containerStorage
Definition ClassDump.h:45
ClassTypeStorage * storage
Definition ClassDump.h:52
ClassDescriptor * descriptor
Definition ClassDump.h:44
uintptr_t propertyID
Definition ClassDump.h:47
uintptr_t enumEnd
Definition ClassDump.h:58
json serialize()
Definition ClassDump.h:70
virtual ~ClassProperty()=default
uint8_t pad[0x30]
Definition ClassDump.h:43
uint32_t pad2
Definition ClassDump.h:51
uintptr_t enumStart
Definition ClassDump.h:57
char * name
Definition ClassDump.h:48
std::string getType()
Definition ClassDump.h:64
void * pad4
Definition ClassDump.h:53
uint32_t getPropertyID()
Definition ClassDump.h:62
char * getName()
Definition ClassDump.h:60
bool isPointer()
Definition ClassDump.h:66
void * pad22
Definition ClassDump.h:56
uint8_t paddd[0x2]
Definition ClassDump.h:46
uintptr_t flags
Definition ClassDump.h:54
char * note
Definition ClassDump.h:55
void * pad3
Definition ClassDump.h:49
Definition ClassDump.h:13
std::string typeName
Definition ClassDump.h:16
virtual ~ClassTypeStorage()=default
uint8_t pad[0x30]
Definition ClassDump.h:15
uint8_t pad1[0x30]
Definition ClassDump.h:17
bool isPointer
Definition ClassDump.h:18
PropClassStorage classes
An external declaration of the PropClassStorage object.
Definition storage.cpp:84
Definition ClassDump.h:112
uintptr_t start
Definition ClassDump.h:113
uintptr_t WTF
Definition ClassDump.h:115
uintptr_t end
Definition ClassDump.h:114