Reflexil 它是Reflector的一個(gè)插件,結(jié)合Reflector,可以進(jìn)行DLL代碼注入等工作,實(shí)踐證明完全可用,方便開發(fā)人員對(duì).NET程序進(jìn)行修改;可以作為一個(gè)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中會(huì)多一個(gè)Reflexil選項(xiàng)
它的界面
用法:
把我剛才寫的Hello world拖進(jìn)Reflector,我們選中程序集,命名空間,類命,方法, Reflexil的界面都是不一樣的.
這里可以知道,我們能注入類,接口,枚舉,方法,等,也可以重命名,刪除.
現(xiàn)在我們來(lái)添加一個(gè)方法試試,選擇Inject method Item Name:Demo(此時(shí)只能聲明無(wú)參,無(wú)返回值的方法,后面會(huì)講什么添加這些)
點(diǎn)ok會(huì)給出警告
意思就是,做大改動(dòng)(注入,刪除,重命名)時(shí)你是看不見結(jié)果,讓你保存一次在導(dǎo)入新的dll文件,那就保存一次
保存好后,把新dll拖到Reflector中,就會(huì)發(fā)現(xiàn)在 Programe中多了一個(gè)Dmeo方法.
現(xiàn)在來(lái)給Demo 寫實(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í)行效果:
原程序:
修改后程序: