Tencent/InjectFix

Unhandled Exception:System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.

Closed this issue · 9 comments

Unhandled Exception:System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
at Mono.Collections.Generic.Collection`1[T].get_Item (System.Int32 index) [0x00009] in :0
at IFix.CodeTranslator.idAccessInject (IFix.CodeTranslator+InjectType injectType, Mono.Cecil.MethodDefinition method, System.Int32 methodId) [0x0007c] in E:\InjectFix\Source\VSProj\Src\Tools\CodeTranslator.cs:999
at IFix.CodeTranslator.injectMethod (Mono.Cecil.MethodDefinition method, System.Int32 methodId) [0x00053] in E:\InjectFix\Source\VSProj\Src\Tools\CodeTranslator.cs:1044
at IFix.CodeTranslator.getMethodId (Mono.Cecil.MethodReference callee, Mono.Cecil.MethodDefinition caller, System.Boolean isCallvirt, System.Boolean directCallVirtual, IFix.CodeTranslator+InjectType callerInjectType) [0x01dfb] in E:\InjectFix\Source\VSProj\Src\Tools\CodeTranslator.cs:1952
at IFix.CodeTranslator.processMethod (Mono.Cecil.MethodDefinition method) [0x00007] in E:\InjectFix\Source\VSProj\Src\Tools\CodeTranslator.cs:608
at IFix.CodeTranslator.Process (Mono.Cecil.AssemblyDefinition assembly, Mono.Cecil.AssemblyDefinition ilfixAassembly, IFix.GenerateConfigure configure, IFix.ProcessMode mode) [0x0036d] in E:\InjectFix\Source\VSProj\Src\Tools\CodeTranslator.cs:3443
at IFix.Program.Main (System.String[] args) [0x00189] in E:\InjectFix\Source\VSProj\Src\Tools\CSFix.cs:101

UnityEngine.Debug:LogError (object)
IFix.Editor.IFixEditor:CallIFix (System.Collections.Generic.List`1) (at Assets/IFix/Editor/ILFixEditor.cs:146)
IFix.Editor.IFixEditor:InjectAssembly (string) (at Assets/IFix/Editor/ILFixEditor.cs:311)
IFix.Editor.IFixEditor:InjectAllAssemblys () (at Assets/IFix/Editor/ILFixEditor.cs:331)
IFix.Editor.IFixEditor:InjectAssemblys () (at Assets/IFix/Editor/ILFixEditor.cs:161)

Tasks

No tasks being tracked yet.

安卓注入失败, Web 平台正常

Unity 版本 2021.2.18f1

经过测试 static IEnumerable hotfix 返回值 长度大于5680 就会出现这个错误,小于则不会

发个函数案例呗

发个函数案例呗
static IEnumerable hotfix
{
get
{
List tList = new List();
Type[] cSharp = Assembly.Load("Assembly-CSharp").GetTypes();
tList.AddRange(cSharp);
Type[] cSharpFirst = Assembly.Load("Assembly-CSharp-firstpass").GetTypes();
tList.AddRange(cSharpFirst);
return tList;
}
}
Assembly-CSharp 定位不到具体函数 ,空项目测试 2W 个长度也不会有问题。

发个函数案例呗

我该如何定位到具体函数呢?

发个函数案例呗

我该如何定位到具体函数呢?
改工程源码,在刚才报错的地方加个打印信息,然后用工程里面[build_for_unity.bat]重新编译一下

发个函数案例呗

我该如何定位到具体函数呢?
改工程源码,在刚才报错的地方加个打印信息,然后用工程里面[build_for_unity.bat]重新编译一下

看看是哪一个函数导致的报错

正确写法
[DllImport("__Internal")]
private static extern void XX();
错误写法
private static extern void XX();
虽然能编译通过但是会注入失败