在本节我们需要看看这个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#: