Il2cppdumper的使用姿势

Il2cppdumper用多了总会遇到dumper自动查找不到codeRegistration和metadataRegistration的情况,所以就需要我们自己去找找

IDA打开lib2cpp.so,ctrl+s 找到 .init_array 第三个函数(一般情况下是这个)


.init_array 的第三个函数
再进去到 sub_3AD608 B上面这个r1
我们要找的就在这里

此处对应源码
...\Unity\Editor\Data\il2cpp\libil2cpp\codegen\il2cpp-codegen-il2cpp.cpp
中的

void il2cpp_codegen_register(const Il2CppCodeRegistration* const codeRegistration, const Il2CppMetadataRegistration* const metadataRegistration, const Il2CppCodeGenOptions* const codeGenOptions)
{
    il2cpp::vm::MetadataCache::Register(codeRegistration, metadataRegistration, codeGenOptions);
}

由此可见
R0 就是 CodeRegistration (unk_ 是一个数值,当成 dword_)
R1 就是 MetadataRegistration (off_ 是一个偏移,点进去看看就是)

见图

继续点进去的话就是对应的
...\Unity\Editor\Data\il2cpp\libil2cpp\vm\MetadataCache.cpp
中的

void il2cpp::vm::MetadataCache::Register(const Il2CppCodeRegistration* const codeRegistration, const Il2CppMetadataRegistration* const metadataRegistration, const Il2CppCodeGenOptions* const codeGenOptions)
{
    s_Il2CppCodeRegistration = codeRegistration;
    s_Il2CppMetadataRegistration = metadataRegistration;
    s_Il2CppCodeGenOptions = codeGenOptions;

    for (int32_t j = 0; j < metadataRegistration->genericClassesCount; j++)
        if (metadataRegistration->genericClasses[j]->typeDefinitionIndex != kTypeIndexInvalid)
            il2cpp::metadata::GenericMetadata::RegisterGenericClass(metadataRegistration->genericClasses[j]);

    for (int32_t i = 0; i < metadataRegistration->genericInstsCount; i++)
        s_GenericInstSet.insert(metadataRegistration->genericInsts[i]);

    s_InteropData.assign_external(codeRegistration->interopData, codeRegistration->interopDataCount);
    s_WindowsRuntimeFactories.assign_external(codeRegistration->windowsRuntimeFactoryTable, codeRegistration->windowsRuntimeFactoryCount);
}
对应的汇编代码

这里就不细说代码了,详细看的话导入一个dumper出来的头文件再F5就行

此文简单的记录一下手动查找codeRegistration和metadataRegistration的方法

以上只是部分情况,有时候这个函数在
导出函数 il2cpp_init 中,最后一条bl跳转
...\Unity\Hub\Editor\2019.4.11f1\Editor\Data\il2cpp\libil2cpp\il2cpp-api.cpp

你可能感兴趣的:(Il2cppdumper的使用姿势)