安卓逆向

unity中的action是什么?

2024-04-15  本文已影响0人  约你一起偷西瓜

用过c++的朋友直接理解为 std::function + std::bind

首先看看基础的类继承关系

以下图中函数为例


由图可知,只要涉及到到action都会继承于 Delegate

所以我们只需要去关注这个类的成员变量到底有些什么就明白了

如下图


这里的target实际上是一个Il2cppObject,即是一个instance

这里的method是一个 il2cppmethod (即我们脚本中常用到的哪个methodinfo)

其他的暂时不用关注,这里当我们调用 action的invoke方法时候,即是调用methodinfo->virtualAddress,同时将m_target当成第一个参数传递给它,如果有action有多个参数,即往后依次传参即可

具体methodinfo是什么

https://github.com/nneonneo/Il2CppVersions/blob/a23ec89104fbd8068065da76bf0e5a1e2d59619d/headers/2019.4.26f1.h#L1162

补充信息:

这种操作我在脚本中的导出函数B_Button(解析OnPointerClick的时候)也用到了,具体可以去参考源码中

ref : https://github.com/axhlzy/Il2CppHookScripts/blob/f656cb9cc429e1e887e87f9f792aa9d19f0c42b4/Il2cppHook/agent/expand/TypeExtends/mscorlibObj/Object/Component/Behavior/MonoBehaviour/Selectable/Button/export.ts#L245

上一篇下一篇

猜你喜欢

热点阅读