├── GameAssemblyEx.sln
├── GameAssemblyEx
├── GameAssemblyEx.vcxproj
├── GameAssemblyEx.vcxproj.filters
├── GameAssemblyEx.vcxproj.user
├── Il2cpp
│ ├── Il2cppInclude.h
│ ├── Il2cppLib.h
│ └── il2cpp.h
└── dllmain.cpp
├── LICENSE
└── README.md
/GameAssemblyEx.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.4.33205.214
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameAssemblyEx", "GameAssemblyEx\GameAssemblyEx.vcxproj", "{F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x64 = Debug|x64
12 | Debug|x86 = Debug|x86
13 | Release|Any CPU = Release|Any CPU
14 | Release|x64 = Release|x64
15 | Release|x86 = Release|x86
16 | EndGlobalSection
17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Debug|Any CPU.ActiveCfg = Debug|x64
19 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Debug|Any CPU.Build.0 = Debug|x64
20 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Debug|x64.ActiveCfg = Debug|x64
21 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Debug|x64.Build.0 = Debug|x64
22 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Debug|x86.ActiveCfg = Debug|Win32
23 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Debug|x86.Build.0 = Debug|Win32
24 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Release|Any CPU.ActiveCfg = Release|x64
25 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Release|Any CPU.Build.0 = Release|x64
26 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Release|x64.ActiveCfg = Release|x64
27 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Release|x64.Build.0 = Release|x64
28 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Release|x86.ActiveCfg = Release|Win32
29 | {F58B2EAE-6E1C-4EFE-9C58-28A7B76B08E1}.Release|x86.Build.0 = Release|Win32
30 | EndGlobalSection
31 | GlobalSection(SolutionProperties) = preSolution
32 | HideSolutionNode = FALSE
33 | EndGlobalSection
34 | GlobalSection(ExtensibilityGlobals) = postSolution
35 | SolutionGuid = {74CC8828-2248-4F20-B33C-04DE472394B4}
36 | EndGlobalSection
37 | EndGlobal
38 |
--------------------------------------------------------------------------------
/GameAssemblyEx/GameAssemblyEx.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | Win32
7 |
8 |
9 | Release
10 | Win32
11 |
12 |
13 | Debug
14 | x64
15 |
16 |
17 | Release
18 | x64
19 |
20 |
21 |
22 | 16.0
23 | Win32Proj
24 | {f58b2eae-6e1c-4efe-9c58-28a7b76b08e1}
25 | GameAssemblyEx
26 | 10.0
27 |
28 |
29 |
30 | DynamicLibrary
31 | true
32 | v143
33 | Unicode
34 |
35 |
36 | DynamicLibrary
37 | false
38 | v143
39 | true
40 | Unicode
41 |
42 |
43 | DynamicLibrary
44 | true
45 | v143
46 | Unicode
47 |
48 |
49 | DynamicLibrary
50 | false
51 | v143
52 | true
53 | Unicode
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | Level3
76 | true
77 | WIN32;_DEBUG;GAMEASSEMBLYEX_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
78 | true
79 | NotUsing
80 | pch.h
81 |
82 |
83 | Windows
84 | true
85 | false
86 |
87 |
88 |
89 |
90 | Level3
91 | true
92 | true
93 | true
94 | WIN32;NDEBUG;GAMEASSEMBLYEX_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
95 | true
96 | NotUsing
97 | pch.h
98 |
99 |
100 | Windows
101 | true
102 | true
103 | true
104 | false
105 |
106 |
107 |
108 |
109 | Level3
110 | true
111 | _DEBUG;GAMEASSEMBLYEX_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
112 | true
113 | NotUsing
114 | pch.h
115 |
116 |
117 | Windows
118 | true
119 | false
120 |
121 |
122 |
123 |
124 | Level3
125 | true
126 | true
127 | true
128 | NDEBUG;GAMEASSEMBLYEX_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
129 | true
130 | NotUsing
131 | pch.h
132 |
133 |
134 | Windows
135 | true
136 | true
137 | true
138 | false
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
--------------------------------------------------------------------------------
/GameAssemblyEx/GameAssemblyEx.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Il2cpp
9 |
10 |
11 | Il2cpp
12 |
13 |
14 | Il2cpp
15 |
16 |
17 |
18 |
19 | {6c7875ae-68d6-4921-a937-bb39cc8b0777}
20 |
21 |
22 |
--------------------------------------------------------------------------------
/GameAssemblyEx/GameAssemblyEx.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | false
5 |
6 |
--------------------------------------------------------------------------------
/GameAssemblyEx/Il2cpp/Il2cppInclude.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 |
8 | #include "il2cpp.h"
9 | #include "Il2cppLib.h"
--------------------------------------------------------------------------------
/GameAssemblyEx/Il2cpp/Il2cppLib.h:
--------------------------------------------------------------------------------
1 | #define IL2CPPLIB
2 |
3 | // Predefined Structs
4 | struct Thread;
5 | struct Domain;
6 | struct Assembly;
7 | struct Image;
8 | struct Class;
9 | struct Type;
10 | struct Field;
11 | struct Method;
12 | struct Paramater;
13 | struct Property;
14 | struct String;
15 | struct Object;
16 | struct Exception;
17 | struct Event;
18 |
19 | // Structures
20 |
21 | struct Thread {;
22 |
23 | static Thread* Attach(Domain* domain) {
24 | return (Thread*)il2cpp_thread_attach((intptr_t)domain);
25 | }
26 |
27 | bool IsVmThread() {
28 | return il2cpp_is_vm_thread((intptr_t)this);
29 | }
30 |
31 | void Detatch() {
32 | il2cpp_thread_detach((intptr_t)this);
33 | }
34 | };
35 |
36 | struct Domain {
37 | public:
38 | static Domain* get_main() {
39 | return (Domain*)il2cpp_domain_get();
40 | }
41 |
42 | Assembly* OpenAssembly(const char* name) {
43 | return (Assembly*)il2cpp_domain_assembly_open((intptr_t)this, name);
44 | }
45 |
46 | std::vector GetAssemblies() {
47 | std::vector assemblies{};
48 | int size = 0;
49 | Assembly** assembly = (Assembly**)il2cpp_domain_get_assemblies((intptr_t)this, size);
50 | for (int i = 0; i < size; i++) {
51 | assemblies.push_back(assembly[i]);
52 | }
53 | return assemblies;
54 | }
55 |
56 | static Image* GetCorlib() {
57 | return (Image*)il2cpp_get_corlib();
58 | }
59 |
60 | };
61 |
62 |
63 | struct Assembly {
64 | public:
65 | Image* GetImage() {
66 | return (Image*)il2cpp_assembly_get_image((intptr_t)this);
67 | }
68 | };
69 |
70 | struct Image {
71 | public:
72 | Assembly* GetAssembly() {
73 | return (Assembly*)il2cpp_image_get_assembly((intptr_t)this);
74 | }
75 |
76 | const char* GetFilename() {
77 | return il2cpp_image_get_filename((intptr_t)this);
78 | }
79 |
80 | const char* GetName() {
81 | return il2cpp_image_get_name((intptr_t)this);
82 | }
83 |
84 | int GetClassCount() {
85 | return il2cpp_image_get_class_count((intptr_t)this);
86 | }
87 |
88 | Class* GetClass(int index) {
89 | return (Class*)il2cpp_image_get_class((intptr_t)this, index);
90 | }
91 |
92 | Class* GetClassFromName(const char* namespaze, const char* name) {
93 | return (Class*)il2cpp_class_from_name((intptr_t)this, namespaze, name);
94 | }
95 |
96 | Method* GetEntryPoint() {
97 | return (Method*)il2cpp_image_get_entry_point((intptr_t)this);
98 | }
99 |
100 | std::vector GetClasses() {
101 | std::vector classes{};
102 | int classCount = this->GetClassCount();
103 |
104 | for (int i = 0; i < classCount; i++) {
105 |
106 | Class* _class = GetClass(i);
107 | if (!_class) {
108 | break;
109 | }
110 | classes.push_back(_class);
111 | }
112 |
113 | return classes;
114 | }
115 | };
116 |
117 | struct Class {
118 | public:
119 |
120 | static Class* GetFromType(Type* type) {
121 | return (Class*)il2cpp_class_from_type((intptr_t)type);
122 | }
123 |
124 | static Class* GetFromSystemType(Type* type) {
125 | return (Class*)il2cpp_class_from_system_type((intptr_t)type);
126 | }
127 |
128 | static Class* GetFromIl2cppType(Type* type) {
129 | return (Class*)il2cpp_class_from_il2cpp_type((intptr_t)type);
130 | }
131 |
132 |
133 | Type* GetEnumBaseType() {
134 | return (Type*)il2cpp_class_enum_basetype((intptr_t)this);
135 | }
136 |
137 | bool IsGeneric() {
138 | return il2cpp_class_is_generic((intptr_t)this);
139 | }
140 |
141 | bool IsInflated() {
142 | return il2cpp_class_is_inflated((intptr_t)this);
143 | }
144 |
145 | // can other classes inherit from this one
146 | bool IsAssignableFrom(Class* oclass) {
147 | return il2cpp_class_is_assignable_from((intptr_t)this, (intptr_t)oclass);
148 | }
149 |
150 | bool IsSubclassOf(Class* oclass, bool check_interfaces) {
151 | return il2cpp_class_is_subclass_of((intptr_t)this, (intptr_t)oclass, check_interfaces);
152 | }
153 |
154 | bool HasParent(Class* oclass) {
155 | return il2cpp_class_has_parent((intptr_t)this, (intptr_t)oclass);
156 | }
157 |
158 | Class* GetElementClass() {
159 | return (Class*)il2cpp_class_get_element_class((intptr_t)this);
160 | }
161 |
162 | Property* GetPropertyFromName(const char* name) {
163 | return (Property*)il2cpp_class_get_property_from_name((intptr_t)this, name);
164 | }
165 |
166 | Field* GetFieldFromName(const char* name) {
167 | return (Field*)il2cpp_class_get_field_from_name((intptr_t)this, name);
168 | }
169 |
170 | Method* GetMethodFromName(const char* name, int argsCount) {
171 | return (Method*)il2cpp_class_get_method_from_name((intptr_t)this, name, argsCount);
172 | }
173 |
174 | const char* GetName() {
175 | return il2cpp_class_get_name((intptr_t)this);
176 | }
177 |
178 | const char* GetNamespace() {
179 | return il2cpp_class_get_namespace((intptr_t)this);
180 | }
181 |
182 | Class* GetParentClass() {
183 | return (Class*)il2cpp_class_get_parent((intptr_t)this);
184 | }
185 |
186 | Class* GetDeclaringType() {
187 | return (Class*)il2cpp_class_get_declaring_type((intptr_t)this);
188 | }
189 |
190 | int GetInstanceSize() {
191 | return il2cpp_class_instance_size((intptr_t)this);
192 | }
193 |
194 | int GetNumFields() {
195 | return il2cpp_class_num_fields((intptr_t)this);
196 | }
197 |
198 | bool IsValuetype() {
199 | return il2cpp_class_is_valuetype((intptr_t)this);
200 | }
201 |
202 | bool IsBlittable() {
203 | return il2cpp_class_is_blittable((intptr_t)this);
204 | }
205 |
206 | int GetValueSize(int align) {
207 | return il2cpp_class_value_size((intptr_t)this, align);
208 | }
209 |
210 | int GetFlags() {
211 | return il2cpp_class_get_flags((intptr_t)this);
212 | }
213 |
214 | bool IsAbstract() {
215 | return il2cpp_class_is_abstract((intptr_t)this);
216 | }
217 |
218 | bool IsInterface() {
219 | return il2cpp_class_is_interface((intptr_t)this);
220 | }
221 |
222 | int GetArrayElementSize() {
223 | return il2cpp_class_array_element_size((intptr_t)this);
224 | }
225 |
226 | Type* GetType() {
227 | return (Type*)il2cpp_class_get_type((intptr_t)this);
228 | }
229 |
230 | uint32_t GetTypeToken() {
231 | return (uint32_t)il2cpp_class_get_type_token((intptr_t)this);
232 | }
233 |
234 | bool HasAttribute(Class* attr_class) {
235 | return il2cpp_class_has_attribute((intptr_t)this, (intptr_t)attr_class);
236 | }
237 |
238 | bool HasReferences() {
239 | return il2cpp_class_has_references((intptr_t)this);
240 | }
241 |
242 | bool IsEnum() {
243 | return il2cpp_class_is_enum((intptr_t)this);
244 | }
245 |
246 | Image* GetImage() {
247 | return (Image*)il2cpp_class_get_image((intptr_t)this);
248 | }
249 |
250 | const char* GetAssemblyName() {
251 | return il2cpp_class_get_assemblyname((intptr_t)this);
252 | }
253 |
254 | int GetRank() {
255 | return il2cpp_class_get_rank((intptr_t)this);
256 | }
257 |
258 | std::vector GetInterfaces() {
259 | std::vector classes{};
260 |
261 | intptr_t _class = 0;
262 | intptr_t _class_iter = 0;
263 | while ((_class = il2cpp_class_get_interfaces((intptr_t)this, _class_iter)) != 0)
264 | {
265 | classes.push_back((Class*)_class);
266 | }
267 |
268 | return classes;
269 | }
270 |
271 | std::vector GetNestedTypes() {
272 | std::vector classes{};
273 |
274 | intptr_t _class = 0;
275 | intptr_t _class_iter = 0;
276 | while ((_class = il2cpp_class_get_nested_types((intptr_t)this, _class_iter)) != 0)
277 | {
278 | classes.push_back((Class*)_class);
279 | }
280 |
281 | return classes;
282 | }
283 |
284 | std::vector GetEvents() {
285 | std::vector events{};
286 |
287 | intptr_t event = 0;
288 | intptr_t event_iter = 0;
289 | while ((event = il2cpp_class_get_events((intptr_t)this, event_iter)) != 0)
290 | {
291 | events.push_back((Event*)event);
292 | }
293 |
294 | return events;
295 | }
296 |
297 | std::vector GetFields() {
298 | std::vector fields{};
299 |
300 | intptr_t field = 0;
301 | intptr_t field_iter = 0;
302 | while ((field = il2cpp_class_get_fields((intptr_t)this, field_iter)) != 0)
303 | {
304 | fields.push_back((Field*)field);
305 | }
306 |
307 | return fields;
308 | }
309 |
310 | std::vector GetMethods() {
311 | std::vector methods{};
312 |
313 | intptr_t method = 0;
314 | intptr_t method_iter = 0;
315 | while ((method = il2cpp_class_get_methods((intptr_t)this, method_iter)) != 0)
316 | {
317 | methods.push_back((Method*)method);
318 | }
319 |
320 | return methods;
321 | }
322 |
323 | std::vector GetProperties() {
324 | std::vector properties{};
325 |
326 | intptr_t property = 0;
327 | intptr_t property_iter = 0;
328 | while ((property = il2cpp_class_get_properties((intptr_t)this, property_iter)) != 0)
329 | {
330 | properties.push_back((Property*)property);
331 | }
332 |
333 | return properties;
334 | }
335 |
336 | };
337 |
338 | struct Type {
339 | public:
340 | Class* GetClassOrElementClass() {
341 | return (Class*)il2cpp_type_get_class_or_element_class((intptr_t)this);
342 | }
343 |
344 | Object* GetTypeObject() {
345 | return (Object*)il2cpp_type_get_object((intptr_t)this);
346 | }
347 |
348 | bool IsEqualTo(Type* otherType) {
349 | return il2cpp_type_equals((intptr_t)this, (intptr_t)otherType);
350 | }
351 |
352 | int GetAttributes() {
353 | return il2cpp_type_get_attrs((intptr_t)this);
354 | }
355 |
356 | const char* GetName() {
357 | return il2cpp_type_get_name((intptr_t)this);
358 | }
359 |
360 | const char* GetAssemblyQualifiedName() {
361 | return il2cpp_type_get_assembly_qualified_name((intptr_t)this);
362 | }
363 |
364 | bool IsByref() {
365 | return il2cpp_type_is_byref((intptr_t)this);
366 | }
367 | };
368 |
369 | struct Field {
370 | public:
371 | int GetFlags() {
372 | return il2cpp_field_get_flags((intptr_t)this);
373 | }
374 |
375 | const char* GetName() {
376 | return il2cpp_field_get_name((intptr_t)this);
377 | }
378 |
379 | int GetOffset() {
380 | return il2cpp_field_get_offset((intptr_t)this);
381 | }
382 |
383 | Class* GetParent() {
384 | return (Class*)il2cpp_field_get_parent((intptr_t)this);
385 | }
386 |
387 | Type* GetType() {
388 | return (Type*)il2cpp_field_get_type((intptr_t)this);
389 | }
390 |
391 | void GetValue(Object* obj, void* value_out) {
392 | il2cpp_field_get_value((intptr_t)obj, (intptr_t)this, value_out);
393 | }
394 |
395 | Object* GetValueObject(Object* obj, void* value_out) {
396 | return (Object*)il2cpp_field_get_value_object((intptr_t)obj, (intptr_t)this);
397 | }
398 |
399 | bool HasAttribute(Class* attrclass) {
400 | return il2cpp_field_has_attribute((intptr_t)this, (intptr_t)attrclass);
401 | }
402 |
403 | void SetValue(Object* obj, void* value) {
404 | il2cpp_field_set_value((intptr_t)obj, (intptr_t)this, value);
405 | }
406 |
407 | void SetValueObject(Object* obj, Object* value) {
408 | il2cpp_field_set_value_object((intptr_t)obj, (intptr_t)this, (intptr_t)value);
409 | }
410 |
411 | void GetStaticValue(void* value) {
412 | il2cpp_field_static_get_value((intptr_t)this, value);
413 | }
414 |
415 | void SetStaticValue(void* value) {
416 | il2cpp_field_static_set_value((intptr_t)this, value);
417 | }
418 | };
419 |
420 | struct Paramater {
421 | public:
422 | Paramater(int index, Type* type, const char* name) {
423 | this->index = index;
424 | this->type = type;
425 | this->name = name;
426 | }
427 |
428 | int GetIndex() {
429 | return this->index;
430 | }
431 |
432 | const char* GetName() {
433 | return this->name;
434 | }
435 |
436 | Type* GetType() {
437 | return this->type;
438 | }
439 |
440 | private:
441 | Type* type;
442 | int index;
443 | const char* name;
444 | };
445 |
446 | struct Method {
447 | public:
448 |
449 | template
450 | T Invoke(Object* obj, std::vector params, bool throwOnErr = true) {
451 |
452 | void** paramaters = params.data();
453 |
454 | intptr_t exception = 0;
455 | T ret = (T)il2cpp_runtime_invoke((intptr_t)this, (intptr_t)obj, paramaters, exception);
456 |
457 | if (throwOnErr && exception) {
458 | Exception* ex = (Exception*)exception;
459 | throw ex;
460 | }
461 |
462 | return ret;
463 | }
464 |
465 | const char* GetName() {
466 | return il2cpp_method_get_name((intptr_t)this);
467 | }
468 |
469 | int GetParamatercount() {
470 | return il2cpp_method_get_param_count((intptr_t)this);
471 | }
472 |
473 | Type* GetReturnType() {
474 | return (Type*)il2cpp_method_get_return_type((intptr_t)this);
475 | }
476 |
477 | Paramater* GetParamater(int index) {
478 | return (Paramater*)il2cpp_method_get_param((intptr_t)this, index);
479 | }
480 |
481 | Class* GetDeclaringType() {
482 | return (Class*)il2cpp_method_get_declaring_type((intptr_t)this);
483 | }
484 |
485 | bool IsGeneric() {
486 | return il2cpp_method_is_generic((intptr_t)this);
487 | }
488 |
489 | bool IsInflated() {
490 | return il2cpp_method_is_inflated((intptr_t)this);
491 | }
492 |
493 | bool IsStatic() {
494 | return !il2cpp_method_is_instance((intptr_t)this);
495 | }
496 |
497 | Class* GetClass() {
498 | return (Class*)il2cpp_method_get_class((intptr_t)this);
499 | }
500 |
501 | bool HasAttribute(Class* attr_class) {
502 | return il2cpp_method_has_attribute((intptr_t)this, (intptr_t)attr_class);
503 | }
504 |
505 | int GetFlags() {
506 | int iflags = 0;
507 | return il2cpp_method_get_flags((intptr_t)this, iflags);
508 | }
509 |
510 | int GetIFlags() {
511 | int iflags = 0;
512 | il2cpp_method_get_flags((intptr_t)this, iflags);
513 | return iflags;
514 | }
515 |
516 | int GetToken() {
517 | return il2cpp_method_get_token((intptr_t)this);
518 | }
519 |
520 | std::vector GetParamaters() {
521 | std::vector paramaters{};
522 |
523 | int paramCount = this->GetParamatercount();
524 | for (int i = 0; i < paramCount; i++) {
525 | Type* type = (Type*)il2cpp_method_get_param((intptr_t)this, i);
526 | const char* name = il2cpp_method_get_param_name((intptr_t)this, i);
527 | paramaters.push_back(new Paramater(i, type, name));
528 | }
529 |
530 | return paramaters;
531 | }
532 |
533 | const char* GenerateSignature()
534 | {
535 | std::string sig = GetReturnType()->GetName(); // int
536 | sig += ' ';
537 | sig += this->GetName(); // int Foo
538 | sig += '('; // int Foo(
539 |
540 | bool firstParamater = true;
541 | for (auto param : this->GetParamaters()) {
542 | if (firstParamater) {
543 | firstParamater = false;
544 | }
545 | else {
546 | sig += ", ";
547 | }
548 | sig += param->GetType()->GetName();
549 | sig += ' ';
550 | sig += param->GetName();
551 | }
552 | sig += ");";
553 | return sig.c_str();
554 | }
555 | };
556 |
557 | struct Property {
558 | const char* GetName() {
559 | return il2cpp_property_get_name((intptr_t)this);
560 | }
561 |
562 | Method* GetGetter() {
563 | return (Method*)il2cpp_property_get_get_method((intptr_t)this);
564 | }
565 |
566 | Method* GetSetter() {
567 | return (Method*)il2cpp_property_get_set_method((intptr_t)this);
568 | }
569 |
570 | int GetFlags() {
571 | return il2cpp_property_get_flags((intptr_t)this);
572 | }
573 |
574 | Class* GetParent() {
575 | return (Class*)il2cpp_property_get_parent((intptr_t)this);
576 | }
577 | };
578 |
579 | //String is WIP
580 | struct String
581 | {
582 | public:
583 | std::string Read()
584 | {
585 | //std::u16string str
586 | std::u16string str{(const char16_t*)il2cpp_string_chars((intptr_t)this)};
587 | std::wstring_convert, int16_t> convert;
588 | const int16_t* i = reinterpret_cast(str.data());
589 | return convert.to_bytes(i, i + str.size());
590 | }
591 | };
592 |
593 | struct Object {
594 | public:
595 | Class* klass;
596 | void* monitor;
597 |
598 | String* ToString() {
599 | if (this) {
600 | return Domain::GetCorlib()
601 | ->GetClassFromName("System", "Object")
602 | ->GetMethodFromName("ToString", 0)
603 | ->Invoke(this, { }, false);
604 | }
605 | return NULL;
606 | }
607 |
608 | std::string ToString_c() {
609 | String* str = ToString();
610 | if (str) {
611 | return str->Read();
612 | }
613 | return "null";
614 | }
615 | };
616 |
617 | struct Exception {
618 | const char* ReadMessage()
619 | {
620 | if (this == nullptr)
621 | return NULL;
622 | constexpr int bufferSize = 65536;
623 | char ourMessageBytes[bufferSize];
624 | il2cpp_format_exception((intptr_t)this, ourMessageBytes, bufferSize);
625 | std::string str(ourMessageBytes);
626 | il2cpp_format_stack_trace((intptr_t)this, ourMessageBytes, bufferSize);
627 | std::string err = str + std::string(ourMessageBytes);
628 | return err.c_str();
629 | }
630 | };
631 |
632 | struct Event {
633 | char* name;
634 | Type* eventType;
635 | Class* parent;
636 | Method* add;
637 | Method* remove;
638 | Method* raise;
639 | uint32_t token;
640 | };
--------------------------------------------------------------------------------
/GameAssemblyEx/Il2cpp/il2cpp.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #define IL2CPP
3 |
4 | #pragma region FUNCTIONS
5 | #define FUNCTIONS \
6 | API_FUNC(void, il2cpp_init, (intptr_t domain_name));\
7 | API_FUNC(void, il2cpp_init_utf16, (intptr_t domain_name));\
8 | API_FUNC(void, il2cpp_shutdown, ());\
9 | API_FUNC(void, il2cpp_set_config_dir, (intptr_t config_path));\
10 | API_FUNC(void, il2cpp_set_data_dir, (intptr_t data_path));\
11 | API_FUNC(void, il2cpp_set_temp_dir, (intptr_t temp_path));\
12 | API_FUNC(void, il2cpp_set_commandline_arguments, (int argc, intptr_t argv, intptr_t basedir));\
13 | API_FUNC(void, il2cpp_set_commandline_arguments_utf16, (int argc, intptr_t argv, intptr_t basedir));\
14 | API_FUNC(void, il2cpp_set_config_utf16, (intptr_t executablePath));\
15 | API_FUNC(void, il2cpp_set_config, (intptr_t executablePath));\
16 | API_FUNC(void, il2cpp_set_memory_callbacks, (intptr_t callbacks));\
17 | API_FUNC(intptr_t, il2cpp_get_corlib, ());\
18 | API_FUNC(void, il2cpp_add_internal_call, (intptr_t name, intptr_t method));\
19 | API_FUNC(intptr_t, il2cpp_resolve_icall, (const char* name));\
20 | API_FUNC(intptr_t, il2cpp_alloc, (int size));\
21 | API_FUNC(void, il2cpp_free, (intptr_t ptr));\
22 | API_FUNC(intptr_t, il2cpp_array_class_get, (intptr_t element_class, int rank));\
23 | API_FUNC(int, il2cpp_array_length, (intptr_t array));\
24 | API_FUNC(int, il2cpp_array_get_byte_length, (intptr_t array));\
25 | API_FUNC(intptr_t, il2cpp_array_new, (intptr_t elementTypeInfo, long length));\
26 | API_FUNC(intptr_t, il2cpp_array_new_specific, (intptr_t arrayTypeInfo, long length));\
27 | API_FUNC(intptr_t, il2cpp_array_new_full, (intptr_t array_class, long& lengths, long& lower_bounds));\
28 | API_FUNC(intptr_t, il2cpp_bounded_array_class_get, (intptr_t element_class, int rank, bool bounded));\
29 | API_FUNC(int, il2cpp_array_element_size, (intptr_t array_class));\
30 | API_FUNC(intptr_t, il2cpp_assembly_get_image, (intptr_t assembly));\
31 | API_FUNC(intptr_t, il2cpp_class_enum_basetype, (intptr_t klass));\
32 | API_FUNC(bool, il2cpp_class_is_generic, (intptr_t klass));\
33 | API_FUNC(bool, il2cpp_class_is_inflated, (intptr_t klass));\
34 | API_FUNC(bool, il2cpp_class_is_assignable_from, (intptr_t klass, intptr_t oklass));\
35 | API_FUNC(bool, il2cpp_class_is_subclass_of, (intptr_t klass, intptr_t klassc, bool check_interfaces));\
36 | API_FUNC(bool, il2cpp_class_has_parent, (intptr_t klass, intptr_t klassc));\
37 | API_FUNC(intptr_t, il2cpp_class_from_il2cpp_type, (intptr_t type));\
38 | API_FUNC(intptr_t, il2cpp_class_from_name, (intptr_t image, const char* namespaze, const char* name));\
39 | API_FUNC(intptr_t, il2cpp_class_from_system_type, (intptr_t type));\
40 | API_FUNC(intptr_t, il2cpp_class_get_element_class, (intptr_t klass));\
41 | API_FUNC(intptr_t, il2cpp_class_get_events, (intptr_t klass, intptr_t& iter));\
42 | API_FUNC(intptr_t, il2cpp_class_get_fields, (intptr_t klass, intptr_t& iter));\
43 | API_FUNC(intptr_t, il2cpp_class_get_nested_types, (intptr_t klass, intptr_t& iter));\
44 | API_FUNC(intptr_t, il2cpp_class_get_interfaces, (intptr_t klass, intptr_t& iter));\
45 | API_FUNC(intptr_t, il2cpp_class_get_properties, (intptr_t klass, intptr_t& iter));\
46 | API_FUNC(intptr_t, il2cpp_class_get_property_from_name, (intptr_t klass, const char* name));\
47 | API_FUNC(intptr_t, il2cpp_class_get_field_from_name, (intptr_t klass, const char* name));\
48 | API_FUNC(intptr_t, il2cpp_class_get_methods, (intptr_t klass, intptr_t& iter));\
49 | API_FUNC(intptr_t, il2cpp_class_get_method_from_name, (intptr_t klass, const char* name, int argsCount));\
50 | API_FUNC(char*, il2cpp_class_get_name, (intptr_t klass));\
51 | API_FUNC(char*, il2cpp_class_get_namespace, (intptr_t klass));\
52 | API_FUNC(intptr_t, il2cpp_class_get_parent, (intptr_t klass));\
53 | API_FUNC(intptr_t, il2cpp_class_get_declaring_type, (intptr_t klass));\
54 | API_FUNC(int, il2cpp_class_instance_size, (intptr_t klass));\
55 | API_FUNC(int, il2cpp_class_num_fields, (intptr_t enumKlass));\
56 | API_FUNC(bool, il2cpp_class_is_valuetype, (intptr_t klass));\
57 | API_FUNC(int, il2cpp_class_value_size, (intptr_t klass, int& align));\
58 | API_FUNC(bool, il2cpp_class_is_blittable, (intptr_t klass));\
59 | API_FUNC(int, il2cpp_class_get_flags, (intptr_t klass));\
60 | API_FUNC(bool, il2cpp_class_is_abstract, (intptr_t klass));\
61 | API_FUNC(bool, il2cpp_class_is_interface, (intptr_t klass));\
62 | API_FUNC(int, il2cpp_class_array_element_size, (intptr_t klass));\
63 | API_FUNC(intptr_t, il2cpp_class_from_type, (intptr_t type));\
64 | API_FUNC(intptr_t, il2cpp_class_get_type, (intptr_t klass));\
65 | API_FUNC(int, il2cpp_class_get_type_token, (intptr_t klass));\
66 | API_FUNC(bool, il2cpp_class_has_attribute, (intptr_t klass, intptr_t attr_class));\
67 | API_FUNC(bool, il2cpp_class_has_references, (intptr_t klass));\
68 | API_FUNC(bool, il2cpp_class_is_enum, (intptr_t klass));\
69 | API_FUNC(intptr_t, il2cpp_class_get_image, (intptr_t klass));\
70 | API_FUNC(char*, il2cpp_class_get_assemblyname, (intptr_t klass));\
71 | API_FUNC(int, il2cpp_class_get_rank, (intptr_t klass));\
72 | API_FUNC(int, il2cpp_class_get_bitmap_size, (intptr_t klass));\
73 | API_FUNC(void, il2cpp_class_get_bitmap, (intptr_t klass, int& bitmap));\
74 | API_FUNC(intptr_t, il2cpp_get_meta_data_pool_memory, ());\
75 | API_FUNC(bool, il2cpp_stats_dump_to_file, (intptr_t path));\
76 | /*API_FUNC(long, il2cpp_stats_get_value, (IL2CPP_Stat stat));\*/ \
77 | API_FUNC(intptr_t, il2cpp_domain_get, ());\
78 | API_FUNC(intptr_t, il2cpp_domain_assembly_open, (intptr_t domain, const char* name));\
79 | API_FUNC(intptr_t*, il2cpp_domain_get_assemblies, (intptr_t domain, int& size));\
80 | API_FUNC(intptr_t, il2cpp_exception_from_name_msg, (intptr_t image, intptr_t name_space, intptr_t name, intptr_t msg));\
81 | API_FUNC(intptr_t, il2cpp_get_exception_argument_null, (intptr_t arg));\
82 | API_FUNC(void, il2cpp_format_exception, (intptr_t ex, void* message, int message_size));\
83 | API_FUNC(void, il2cpp_format_stack_trace, (intptr_t ex, void* output, int output_size));\
84 | API_FUNC(void, il2cpp_unhandled_exception, (intptr_t ex));\
85 | API_FUNC(int, il2cpp_field_get_flags, (intptr_t field));\
86 | API_FUNC(char*, il2cpp_field_get_name, (intptr_t field));\
87 | API_FUNC(intptr_t, il2cpp_field_get_parent, (intptr_t field));\
88 | API_FUNC(int, il2cpp_field_get_offset, (intptr_t field));\
89 | API_FUNC(intptr_t, il2cpp_field_get_type, (intptr_t field));\
90 | API_FUNC(void, il2cpp_field_get_value, (intptr_t obj, intptr_t field, void* value));\
91 | API_FUNC(intptr_t, il2cpp_field_get_value_object, (intptr_t field, intptr_t obj));\
92 | API_FUNC(bool, il2cpp_field_has_attribute, (intptr_t field, intptr_t attr_class));\
93 | API_FUNC(void, il2cpp_field_set_value, (intptr_t obj, intptr_t field, void* value));\
94 | API_FUNC(void, il2cpp_field_static_get_value, (intptr_t field, void* value));\
95 | API_FUNC(void, il2cpp_field_static_set_value, (intptr_t field, void* value));\
96 | API_FUNC(void, il2cpp_field_set_value_object, (intptr_t instance, intptr_t field, intptr_t value));\
97 | API_FUNC(void, il2cpp_gc_collect, (int maxGenerations));\
98 | API_FUNC(int, il2cpp_gc_collect_a_little, ());\
99 | API_FUNC(void, il2cpp_gc_disable, ());\
100 | API_FUNC(void, il2cpp_gc_enable, ());\
101 | API_FUNC(bool, il2cpp_gc_is_disabled, ());\
102 | API_FUNC(long, il2cpp_gc_get_used_size, ());\
103 | API_FUNC(long, il2cpp_gc_get_heap_size, ());\
104 | API_FUNC(void, il2cpp_gc_wbarrier_set_field, (intptr_t obj, intptr_t& targetAddress, intptr_t gcObj));\
105 | API_FUNC(int, il2cpp_gchandle_new, (intptr_t obj, bool pinned));\
106 | API_FUNC(int, il2cpp_gchandle_new_weakref, (intptr_t obj, bool track_resurrection));\
107 | API_FUNC(intptr_t, il2cpp_gchandle_get_target, (int gchandle));\
108 | API_FUNC(void, il2cpp_gchandle_free, (int gchandle));\
109 | API_FUNC(intptr_t, il2cpp_unity_liveness_calculation_begin, (intptr_t filter, int max_object_count, intptr_t callback, intptr_t userdata, intptr_t onWorldStarted, intptr_t onWorldStopped));\
110 | API_FUNC(void, il2cpp_unity_liveness_calculation_end, (intptr_t state));\
111 | API_FUNC(void, il2cpp_unity_liveness_calculation_from_root, (intptr_t root, intptr_t state));\
112 | API_FUNC(void, il2cpp_unity_liveness_calculation_from_statics, (intptr_t state));\
113 | API_FUNC(intptr_t, il2cpp_method_get_return_type, (intptr_t method));\
114 | API_FUNC(intptr_t, il2cpp_method_get_declaring_type, (intptr_t method));\
115 | API_FUNC(char*, il2cpp_method_get_name, (intptr_t method));\
116 | API_FUNC(intptr_t, il2cpp_method_get_from_reflection, (intptr_t method));\
117 | API_FUNC(intptr_t, il2cpp_method_get_object, (intptr_t method, intptr_t refclass));\
118 | API_FUNC(bool, il2cpp_method_is_generic, (intptr_t method));\
119 | API_FUNC(bool, il2cpp_method_is_inflated, (intptr_t method));\
120 | API_FUNC(bool, il2cpp_method_is_instance, (intptr_t method));\
121 | API_FUNC(int, il2cpp_method_get_param_count, (intptr_t method));\
122 | API_FUNC(intptr_t, il2cpp_method_get_param, (intptr_t method, int index));\
123 | API_FUNC(intptr_t, il2cpp_method_get_class, (intptr_t method));\
124 | API_FUNC(bool, il2cpp_method_has_attribute, (intptr_t method, intptr_t attr_class));\
125 | API_FUNC(int, il2cpp_method_get_flags, (intptr_t method, int& iflags));\
126 | API_FUNC(int, il2cpp_method_get_token, (intptr_t method));\
127 | API_FUNC(char*, il2cpp_method_get_param_name, (intptr_t method, int index));\
128 | API_FUNC(void, il2cpp_profiler_install, (intptr_t prof, intptr_t shutdown_callback));\
129 | API_FUNC(void, il2cpp_profiler_install_enter_leave, (intptr_t enter, intptr_t fleave));\
130 | API_FUNC(void, il2cpp_profiler_install_allocation, (intptr_t callback));\
131 | API_FUNC(void, il2cpp_profiler_install_gc, (intptr_t callback, intptr_t heap_resize_callback));\
132 | API_FUNC(void, il2cpp_profiler_install_fileio, (intptr_t callback));\
133 | API_FUNC(void, il2cpp_profiler_install_thread, (intptr_t start, intptr_t end));\
134 | API_FUNC(int, il2cpp_property_get_flags, (intptr_t prop));\
135 | API_FUNC(intptr_t, il2cpp_property_get_get_method, (intptr_t prop));\
136 | API_FUNC(intptr_t, il2cpp_property_get_set_method, (intptr_t prop));\
137 | API_FUNC(char*, il2cpp_property_get_name, (intptr_t prop));\
138 | API_FUNC(intptr_t, il2cpp_property_get_parent, (intptr_t prop));\
139 | API_FUNC(intptr_t, il2cpp_object_get_class, (intptr_t obj));\
140 | API_FUNC(int, il2cpp_object_get_size, (intptr_t obj));\
141 | API_FUNC(intptr_t, il2cpp_object_get_virtual_method, (intptr_t obj, intptr_t method));\
142 | API_FUNC(intptr_t, il2cpp_object_new, (intptr_t klass));\
143 | API_FUNC(intptr_t, il2cpp_object_unbox, (intptr_t obj));\
144 | API_FUNC(intptr_t, il2cpp_value_box, (intptr_t klass, intptr_t data));\
145 | API_FUNC(void, il2cpp_monitor_enter, (intptr_t obj));\
146 | API_FUNC(bool, il2cpp_monitor_try_enter, (intptr_t obj, int timeout));\
147 | API_FUNC(void, il2cpp_monitor_exit, (intptr_t obj));\
148 | API_FUNC(void, il2cpp_monitor_pulse, (intptr_t obj));\
149 | API_FUNC(void, il2cpp_monitor_pulse_all, (intptr_t obj));\
150 | API_FUNC(void, il2cpp_monitor_wait, (intptr_t obj));\
151 | API_FUNC(bool, il2cpp_monitor_try_wait, (intptr_t obj, int timeout));\
152 | API_FUNC(intptr_t, il2cpp_runtime_invoke, (intptr_t method, intptr_t obj, void** param, intptr_t& exc));\
153 | API_FUNC(intptr_t, il2cpp_runtime_invoke_convert_args, (intptr_t method, intptr_t obj, void** param, int paramCount, intptr_t& exc));\
154 | API_FUNC(void, il2cpp_runtime_class_init, (intptr_t klass));\
155 | API_FUNC(void, il2cpp_runtime_object_init, (intptr_t obj));\
156 | API_FUNC(void, il2cpp_runtime_object_init_exception, (intptr_t obj, intptr_t& exc));\
157 | API_FUNC(int, il2cpp_string_length, (intptr_t str));\
158 | API_FUNC(char*, il2cpp_string_chars, (intptr_t str));\
159 | API_FUNC(intptr_t, il2cpp_string_new, (const char* str));\
160 | API_FUNC(intptr_t, il2cpp_string_new_len, (const char* str, int length));\
161 | API_FUNC(intptr_t, il2cpp_string_new_utf16, (const char* text, int len));\
162 | API_FUNC(intptr_t, il2cpp_string_new_wrapper, (char* str));\
163 | API_FUNC(intptr_t, il2cpp_string_intern, (const char* str));\
164 | API_FUNC(intptr_t, il2cpp_string_is_interned, (const char* str));\
165 | API_FUNC(intptr_t, il2cpp_thread_current, ());\
166 | API_FUNC(intptr_t, il2cpp_thread_attach, (intptr_t domain));\
167 | API_FUNC(void, il2cpp_thread_detach, (intptr_t thread));\
168 | API_FUNC(void**, il2cpp_thread_get_all_attached_threads, (int& size));\
169 | API_FUNC(bool, il2cpp_is_vm_thread, (intptr_t thread));\
170 | API_FUNC(void, il2cpp_current_thread_walk_frame_stack, (intptr_t func, intptr_t user_data));\
171 | API_FUNC(void, il2cpp_thread_walk_frame_stack, (intptr_t thread, intptr_t func, intptr_t user_data));\
172 | API_FUNC(bool, il2cpp_current_thread_get_top_frame, (intptr_t frame));\
173 | API_FUNC(bool, il2cpp_thread_get_top_frame, (intptr_t thread, intptr_t frame));\
174 | API_FUNC(bool, il2cpp_current_thread_get_frame_at, (int offset, intptr_t frame));\
175 | API_FUNC(bool, il2cpp_thread_get_frame_at, (intptr_t thread, int offset, intptr_t frame));\
176 | API_FUNC(int, il2cpp_current_thread_get_stack_depth, ());\
177 | API_FUNC(int, il2cpp_thread_get_stack_depth, (intptr_t thread));\
178 | API_FUNC(intptr_t, il2cpp_type_get_object, (intptr_t type));\
179 | API_FUNC(int, il2cpp_type_get_type, (intptr_t type));\
180 | API_FUNC(intptr_t, il2cpp_type_get_class_or_element_class, (intptr_t type));\
181 | API_FUNC(char*, il2cpp_type_get_name, (intptr_t type));\
182 | API_FUNC(bool, il2cpp_type_is_byref, (intptr_t type));\
183 | API_FUNC(int, il2cpp_type_get_attrs, (intptr_t type));\
184 | API_FUNC(bool, il2cpp_type_equals, (intptr_t type, intptr_t otherType));\
185 | API_FUNC(char*, il2cpp_type_get_assembly_qualified_name, (intptr_t type));\
186 | API_FUNC(intptr_t, il2cpp_image_get_assembly, (intptr_t image));\
187 | API_FUNC(char*, il2cpp_image_get_name, (intptr_t image));\
188 | API_FUNC(char*, il2cpp_image_get_filename, (intptr_t image));\
189 | API_FUNC(intptr_t, il2cpp_image_get_entry_point, (intptr_t image));\
190 | API_FUNC(int, il2cpp_image_get_class_count, (intptr_t image));\
191 | API_FUNC(intptr_t, il2cpp_image_get_class, (intptr_t image, int index));\
192 | API_FUNC(intptr_t, il2cpp_capture_memory_snapshot, ());\
193 | API_FUNC(void, il2cpp_free_captured_memory_snapshot, (intptr_t snapshot));\
194 | API_FUNC(void, il2cpp_set_find_plugin_callback, (intptr_t method));\
195 | API_FUNC(void, il2cpp_register_log_callback, (intptr_t method));\
196 | API_FUNC(void, il2cpp_debugger_set_agent_options, (intptr_t options));\
197 | API_FUNC(bool, il2cpp_is_debugger_attached, ());\
198 | API_FUNC(void, il2cpp_unity_install_unitytls_interface, (void* unitytlsInterfaceStruct));\
199 | API_FUNC(intptr_t, il2cpp_custom_attrs_from_class, (intptr_t klass));\
200 | API_FUNC(intptr_t, il2cpp_custom_attrs_from_method, (intptr_t method));\
201 | API_FUNC(intptr_t, il2cpp_custom_attrs_get_attr, (intptr_t ainfo, intptr_t attr_klass));\
202 | API_FUNC(bool, il2cpp_custom_attrs_has_attr, (intptr_t ainfo, intptr_t attr_klass));\
203 | API_FUNC(intptr_t, il2cpp_custom_attrs_construct, (intptr_t cinfo));\
204 | API_FUNC(void, il2cpp_custom_attrs_free, (intptr_t ainfo));
205 | #pragma endregion
206 |
207 | #define API_FUNC(rt, n, p) rt (*n) p
208 | FUNCTIONS
209 | #undef API_FUNC
210 |
211 | void il2cpp_header_AllocConsole()
212 | {
213 | AllocConsole();
214 | freopen_s((FILE**)stdin, "CONIN$", "r", stdin);
215 | freopen_s((FILE**)stdout, "CONOUT$", "w", stdout);
216 | freopen_s((FILE**)stderr, "CONOUT$", "w", stderr);
217 | };
218 | bool il2cpp_header_isInit = false;
219 | void il2cpp_header_init()
220 | {
221 | if (il2cpp_header_isInit) { return; }
222 | il2cpp_header_isInit = true;
223 | HMODULE GameAssembly = LoadLibraryA("GameAssembly.dll");
224 | if (!GameAssembly)
225 | return;
226 | #define API_FUNC(r, n, p) n = (r (*) p)(GetProcAddress(GameAssembly, #n))
227 | FUNCTIONS
228 | #undef API_FUNC
229 | };
230 | #undef FUNCTIONS
--------------------------------------------------------------------------------
/GameAssemblyEx/dllmain.cpp:
--------------------------------------------------------------------------------
1 | #include "Il2cpp/Il2cppInclude.h"
2 |
3 | void Main() {
4 | il2cpp_header_init();
5 | il2cpp_header_AllocConsole();
6 |
7 | auto domain = Domain::get_main();
8 | auto _thread = Thread::Attach(domain);
9 | try
10 | {
11 | for (Assembly* assembly : domain->GetAssemblies()) {
12 | std::cout << assembly->GetImage()->GetFilename() << '\n';
13 | }
14 | }
15 | catch(Exception* ex)
16 | {
17 | std::cout << "ERROR: " << ex->ReadMessage() << '\n';
18 | }
19 | _thread->Detatch();
20 | return;
21 | }
22 |
23 |
24 | BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
25 | {
26 | if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
27 | CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Main, 0, 0, 0);
28 | }
29 | return TRUE;
30 | }
31 |
32 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Glatrix
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GameAssemblyEx
2 | A C++ Library aimed at making mod development with Il2cpp compiled Unity Engine games easier
3 |
4 | Features:
5 |
6 | - Il2cpp Domain Functions
7 | - Il2cpp Assembly Functions
8 | - Il2cpp Image Functions
9 | - Il2cpp Class Functions
10 | - Il2cpp Field Functions
11 | - Il2cpp Property Functions
12 | - Il2cpp Method Functions (including invokers)
13 | - Il2cpp Object Functions (Only some for now, plan to add more soon)
14 |
15 | Coming Soon (hopfully):
16 |
17 | - Exception Throwing, Handling, and Formatting (with stack data)
18 | - Type Injection via MonoBehaviour hooking
19 | - Add more functions and Il2cpp Types. (String, Object, ValueTypes, Collections, etc)
20 | - Cleaner Code
21 |
--------------------------------------------------------------------------------