五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

12.Unity-MonoCecil 方法重定向 初探

2023-04-30 13:07 作者:機(jī)智的小草yns  | 我要投稿

Cecil是一個(gè)用來(lái)生成和檢查“ECMA CIL”格式的程序和類庫(kù)的一個(gè)類庫(kù)。用來(lái)對(duì)IL層的代碼注入,達(dá)到代碼重定向的作用。

通過(guò)了解MonoCecil,了解IL碼寫(xiě)法,了解IL熱更框架的原理

對(duì)于Unity方法重定向,還是更加推薦其他開(kāi)源項(xiàng)目:

比如MonoHook,UnityHook,DotNetHook等等,找一個(gè)合適就可以。


使用MonoCecil實(shí)現(xiàn)方法重定向

將Test() 重定向?yàn)?Test2()


使用監(jiān)視器的按鈕執(zhí)行Test函數(shù)

執(zhí)行的Test函數(shù)的按鈕

注入前的輸出結(jié)果

注入前


注入后執(zhí)行Test方法, 方法已經(jīng)重定向到Test2()

注入后


下面展示如何實(shí)現(xiàn)

環(huán)境需要: Mono.Cecil.dll、Mono.Cecil.Mdb.dll、Mono.Cecil.Pdb.dl

這里直接借用ILRuntime的

XiaoCaoTest類需要放在AssemblyDef的環(huán)境中


注入邏輯

在編輯器中執(zhí)行一次DoInject()

首先獲取必要數(shù)據(jù):AssemblyDefinition,TypeDefinition


獲取完數(shù)據(jù)->執(zhí)行注入InjectMethod

1.獲取方法1(MethodDefinition)->獲取方法1的IL指令

2.在指令前插入新指令: InsertBefore

????輸入?yún)?shù)->無(wú)參數(shù)->自身 ->? OpCodes.Ldarg_0?

????調(diào)用方法2 OpCodes.Call , method2

????return中斷 -> OpCodes.Ret



其他函數(shù)

獲取AssemblyDef

dll文件一般放在項(xiàng)目的 Library\ScriptAssemblies中

計(jì)算注入后的函數(shù)偏移值

必要Using補(bǔ)充


缺點(diǎn):是在dll文件中注入,當(dāng)編輯器重新編譯時(shí),dll中注入的內(nèi)容會(huì)消失。需要重新注入。

而自動(dòng)注入的方法也過(guò)于麻煩。


自動(dòng)注入的思路:

使用[InitializeOnLoadMethod]標(biāo)記配合

CompilationPipeline.assemblyCompilationFinished += CallBack

注冊(cè)編譯完成的回調(diào),執(zhí)行注入。

但還要注意,一個(gè)dll只能注入一次,注入多次,注入的結(jié)果會(huì)累加在dll中。

所以就需要一個(gè)變量來(lái)緩存是否已經(jīng)注入過(guò)。可以在目標(biāo)類加入一個(gè)標(biāo)記用的方法,如果方法存在則說(shuō)明注入過(guò),不需要注入。

這類自動(dòng)注入,在其他熱更框架上應(yīng)該都做得很好。










12.Unity-MonoCecil 方法重定向 初探的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
三台县| 老河口市| 陆河县| 浦东新区| 漳平市| 南乐县| 镶黄旗| 方正县| 阿拉善右旗| 唐海县| 娄烦县| 海林市| 梅河口市| 陵川县| 偏关县| 探索| 固安县| 博客| 吴旗县| 保山市| 沈阳市| 襄城县| 大姚县| 东兰县| 临泉县| 伽师县| 梧州市| 普陀区| 岑巩县| 武宁县| 嘉鱼县| 潜江市| 乌拉特后旗| 长寿区| 朝阳县| 喜德县| 南汇区| 寿宁县| 三原县| 龙井市| 甘孜县|