Reflexil 它是Reflector的一個(gè)插件,結(jié)合Reflector,可以進(jìn)行DLL代碼注入等工作,實(shí)踐證明完全可用,方便開(kāi)發(fā)人員對(duì).NET程序進(jìn)行修改;可以作為一個(gè)Reflector插件修改程序集的IL并保存到磁盤(pán)文件,也可以在自己的.NET程序中調(diào)用進(jìn)行更為靈活的.NET程序集修改。 工具獲取:1.可以直接到Reflector下載:http://www./soft/62031.html 2.打開(kāi)Reflector, Tool=>Add-ins=>Add-In Gallery, 跳轉(zhuǎn)到 上面的下載地址 下載好Reflexil后,在Add-ins 界面,點(diǎn)"+",選擇Reflexil.Reflector.AIO.dll,然后Close 現(xiàn)在在Tool中會(huì)多一個(gè)Reflexil選項(xiàng) 它的界面 用法: 把我剛才寫(xiě)的Hello world拖進(jìn)Reflector,我們選中程序集,命名空間,類(lèi)命,方法, Reflexil的界面都是不一樣的. 這里可以知道,我們能注入類(lèi),接口,枚舉,方法,等,也可以重命名,刪除. 現(xiàn)在我們來(lái)添加一個(gè)方法試試,選擇Inject method Item Name:Demo(此時(shí)只能聲明無(wú)參,無(wú)返回值的方法,后面會(huì)講什么添加這些) 點(diǎn)ok會(huì)給出警告 意思就是,做大改動(dòng)(注入,刪除,重命名)時(shí)你是看不見(jiàn)結(jié)果,讓你保存一次在導(dǎo)入新的dll文件,那就保存一次 保存好后,把新dll拖到Reflector中,就會(huì)發(fā)現(xiàn)在 Programe中多了一個(gè)Dmeo方法. 現(xiàn)在來(lái)給Demo 寫(xiě)實(shí)現(xiàn) 選擇Demo 后右邊的界面為: 選擇Main: instructions 中是IL指令, 高玩可以直接修改添加指令,但不是高玩咋辦? 我們選擇Replace all with code... 替換所以代碼. 不過(guò)在這之前 先在Parameters添加一個(gè)參數(shù)string name,并在Attributes 將Return type設(shè)為stirng 我再次點(diǎn)擊Replace all with code... 代碼已經(jīng)更新為 修改完成后,點(diǎn)compile 如果沒(méi)有錯(cuò)誤,就會(huì)生成IL指令,點(diǎn)ok就行 現(xiàn)在在來(lái)修改一下Main方法,調(diào)用Demo 代碼已經(jīng)改完,現(xiàn)在保存看看執(zhí)行效果: 原程序: 修改后程序: |
|
來(lái)自: herowuking > 《C#》