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