大佬们, Unity游戏hook之后, 无法调用原始逻辑, 是哪里有问题啊?

找到了一个Unity的函数, Hook成功了, 但是想要恢复Unity的原始逻辑却crash了, 姿势不对吗?
错误信息: EXC_BAD_ACCESS (code=1, address=0x0)

代码

char* (*GetImageById)(int img_id);
char* replace_GetImageById(int img_id) {
    return GetImageById(img_id);
}

%ctor
{
    @autoreleasepool
    {
        unsigned long GetImageById = _dyld_get_image_vmaddr_slide(0) + 0x1014D07A8;
        MSHookFunction((void *)GetImageById, (void *)&replace_GetImageById, (void **)&GetImageById);
    }
}
char* (*orig_GetImageById)(int img_id);
char* replace_GetImageById(int img_id) {
    return orig_GetImageById(img_id);
}

%ctor
{
    @autoreleasepool
    {
        unsigned long GetImageById = _dyld_get_image_vmaddr_slide(0) + 0x1014D07A8;
        MSHookFunction((void *)GetImageById, (void *)&replace_GetImageById, (void **)&orig_GetImageById);
    }
}

意思是我在声明原函数的时候, 不能和原函数同名, 否则会出现问题吗?

不闪退了, 确实是我什么原函数时, 命名的问题
感谢感谢 :100:

你应该是对hook的原理不清楚, 找了一张图, 你仔细看看, 就容易理解了
image

3 个赞

感谢, 这样看确实好理解了 :+1: