Skip to content

Commit c769e43

Browse files
authored
Update README.md
1 parent a4a816e commit c769e43

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,38 @@ s_Il2CppCodeRegistration=ABCD0B0
2929
s_Il2CppMetadataRegistration=ABCD0B8
3030
```
3131

32+
33+
34+
## Finding necessary offsets
35+
To identify required offsets for working with **libil2cpp or libunity**, you can inspect the official Unity source implementation, precisely at [MetadataCache.cpp](https://github.com/dreamanlan/il2cpp_ref/blob/master/libil2cpp/vm/MetadataCache.cpp#L143), you can look for useful **patterns or strings** to identify these structures in the binary using reverse engineering tools like **IDA, Ghidra, ...**
36+
```cpp
37+
void MetadataCache::Register(const Il2CppCodeRegistration* const codeRegistration, const Il2CppMetadataRegistration* const metadataRegistration, const Il2CppCodeGenOptions* const codeGenOptions)
38+
{
39+
s_Il2CppCodeRegistration = codeRegistration; /* Il2CppCodeRegistration */
40+
s_Il2CppMetadataRegistration = metadataRegistration; /* Il2CppMetadataRegistration */
41+
s_Il2CppCodeGenOptions = codeGenOptions;
42+
43+
for (int32_t j = 0; j < metadataRegistration->genericClassesCount; j++)
44+
if (metadataRegistration->genericClasses[j]->typeDefinitionIndex != kTypeIndexInvalid)
45+
metadata::GenericMetadata::RegisterGenericClass(metadataRegistration->genericClasses[j]);
46+
47+
for (int32_t i = 0; i < metadataRegistration->genericInstsCount; i++)
48+
s_GenericInstSet.insert(metadataRegistration->genericInsts[i]);
49+
50+
s_InteropData.assign_external(codeRegistration->interopData, codeRegistration->interopDataCount);
51+
}
52+
53+
static void* s_GlobalMetadata;
54+
static const Il2CppGlobalMetadataHeader* s_GlobalMetadataHeader;
55+
56+
void MetadataCache::Initialize()
57+
{
58+
s_GlobalMetadata = vm::MetadataLoader::LoadMetadataFile("global-metadata.dat"); /* GlobalMetadata */
59+
s_GlobalMetadataHeader = (const Il2CppGlobalMetadataHeader*)s_GlobalMetadata; /* GlobalMetadataHeader */
60+
/* ... */
61+
}
62+
```
63+
3264
## Acknowledgement
3365
3466
- [Zygisk Il2CppDumper](https://github.com/Perfare/Zygisk-Il2CppDumper)

0 commit comments

Comments
 (0)