在本節我們需要看看這個mono.cecil,先來一個簡單的認識。
我來在我們的方法執行前後加入我們的輸出資訊:
原來代碼:

class program
{
static void main(string[] args)
{
console.writeline("破浪blog:http://www.cnblogs.com/whitewolf/");
}
}

任務:
1我将在方法執行前後添加一個console.writeline("method start…");
2方法最後添加console.writeline("method finish…“);
具體mono.cecil code:

using system;
using system.collections.generic;
using system.linq;
using system.text;
using mono.cecil;
using mono.cecil.cil;
namespace blogsample
{
class program
{
static void main(string[] args)
{
assemblydefinition assembiy = assemblyfactory.getassembly(args[0]);
foreach (mono.cecil.typedefinition item in assembiy.mainmodule.types)
{
foreach (methoddefinition method in item.methods)
{
if (method.name.equals("main"))
{
var ins = method.body.instructions[0];
var worker = method.body.cilworker;
worker.insertbefore(ins, worker.create(opcodes.ldstr, "method start…"));
worker.insertbefore(ins, worker.create(opcodes.call,
assembiy.mainmodule.import(typeof(console).getmethod("writeline", new type[] { typeof(string) }))));
ins = method.body.instructions[method.body.instructions.count - 1];
worker.insertbefore(ins, worker.create(opcodes.ldstr, "method finish…"));
break;
}
}
}
assemblyfactory.saveassembly(assembiy, "il_" + args[0]);
console.read();
}
}
}

dos運作結果:
我們在來看看反編譯後的msil
c#: