首頁
社區(qū)
課程
招聘
Unity如何反射獲得泛型函數(shù)的地址?
wx_嗨 2022-12-21 1276

例如:
public sealed class Action<T> : MulticastDelegate
public virtual void Invoke(T obj) { }
利用Il2cppDumper可以獲得具體類型的函數(shù)地址
|-RVA: 0x3A25D14 Offset: 0x3A25D14 VA: 0x3A25D14
|-Action<bool>.Invoke
但是利用il2cpp_class_get_method_from_name獲取Action`1中的Invoke函數(shù)獲取不到0x3A25D14 這個(gè)偏移。
查詢相關(guān)資料,發(fā)現(xiàn)可以用函數(shù)MakeGenericMethod獲取
public virtual MethodInfo MakeGenericMethod(Type[] typeArguments) { }
但是該函數(shù)的參數(shù)位Type[],我通過Assembly_GetType("System.Boolean")獲取Type,調(diào)用MakeGenericMethod失敗,構(gòu)造Array調(diào)用也失敗,請(qǐng)問要如何構(gòu)造這個(gè)參數(shù),完成Action<bool>.Invoke函數(shù)地址的獲???或者是否有更好方法能夠字節(jié)得到Action<bool>.Invoke的函數(shù)地址?

收藏
1條回答
Niceto 2022-12-26

在 Unity 中,你可以使用 System.Reflection 命名空間中的 MethodInfo 類來獲取泛型函數(shù)的地址。

 

下面是一個(gè)例子,展示了如何使用反射獲取泛型函數(shù)的地址:

段落引用
插入代碼using System.Reflection;

 

// 假設(shè)有一個(gè)泛型函數(shù):
void MyGenericFunction<T>(T arg) { }

 

// 使用反射獲取泛型函數(shù)的地址
MethodInfo method = typeof(MyClass).GetMethod("MyGenericFunction");

 

// 獲取泛型函數(shù)的類型參數(shù)列表
Type[] typeArguments = method.GetGenericArguments();

 

// 使用 MakeGenericMethod 方法創(chuàng)建泛型函數(shù)的實(shí)例
MethodInfo genericMethod = method.MakeGenericMethod(typeof(int));

 

在這個(gè)例子中,我們使用 Type.GetMethod 方法獲取泛型函數(shù)的 MethodInfo 對(duì)象,然后使用 MethodInfo.GetGenericArguments 方法獲取泛型函數(shù)的類型參數(shù)列表,最后使用 MethodInfo.MakeGenericMethod 方法創(chuàng)建泛型函數(shù)的實(shí)例。

回復(fù)