有没有办法欺骗.net JIT编译器运行另一个方法?

Tra*_*ony 7 .net security clr jit dynamic-execution

好的,假设我的应用程序向内存发出(x86)指令,使页面可执行等等.有没有办法改变un-JITted方法的方法存根指向我发出的指令流?

例如:

假设我在内存中创建了一个x86指令流,它可以执行任意操作.现在,进一步假设我有一个方法'int Target()'.我还没有打电话,所以还没有编译.有没有办法:

  1. 获取指向Target的存根的指针
  2. 使它指向我发出的指令流.

我意识到.Net的几乎每一个安全功能都是为了防止像这样的劫持.但是,通过托管API可以实现吗?

lep*_*pie 10

这可以通过Profiling API实现.我从未使用它,但它在TypeMock中用于类似的目的.

编辑:我认为在MSDN博客上有一个很好的帖子,将去寻找它.

编辑2:Doh,第一次击中!


Kul*_*ini 6

是的,你可以做到!

mscorjit的钩子getJit方法.每当有任何方法需要Jitting时,你都会被问到.你可以通过你想要的任何东西.一些.net保护器就像这样工作.