直接在.Net程序(C#)中执行 native code
不使用C++CLI,不使用 native dll.
直接在 .Net 程序 中之行 native code。
在vb时代就曾经有不少好事者做过在vb中直接调用之行汇编代码。
还专门做出了通用的模块来进行汇编代码的动态生成。
实际上这就是执行 inline asm 。
.Net 中这个老方法仍然有效。不过今天要介绍的不是这个,而是一个函数接口更多样的方式。
大概是06年写过一个帖子 在 C# 中动态调用 native dll 的导出函数 。
今天介绍的方法和这个有一个公共点,都是利用了.Net 2.0的一个新特性。
Marshal.GetDelegateForFunctionPointer
和动态调用api不一样的是,函数指针不是从外部 dll 获取的,而是.Net程序动态分配的。
实际上也是执行 inline asm。
它相比vb时代的老方法,优点是,函数原型可以多样化,
调用可以通过委托方式,参数中的.Net类型到本地类型由框架自动转换。
可能这个一般人可能会很少用到。
实际用途有哪些呢?
拿来玩玩,显摆显摆;)
在安全保护方面还是可以适当利用利用。
如纯开发员的角度来看,可以将这个应用到注册授权认证的代码中。
另外可以用在 .Net 安全保护工具上,加密工具加密.Net程序后自动给程序集中注入这些调用。
甚至可以把一些简单方法体在加密时就编译成native代码插入。
而且可以不用附带一个native dll。
直接在 .Net 程序 中之行 native code。
在vb时代就曾经有不少好事者做过在vb中直接调用之行汇编代码。
还专门做出了通用的模块来进行汇编代码的动态生成。
实际上这就是执行 inline asm 。
.Net 中这个老方法仍然有效。不过今天要介绍的不是这个,而是一个函数接口更多样的方式。
大概是06年写过一个帖子 在 C# 中动态调用 native dll 的导出函数 。
今天介绍的方法和这个有一个公共点,都是利用了.Net 2.0的一个新特性。
Marshal.GetDelegateForFunctionPointer
和动态调用api不一样的是,函数指针不是从外部 dll 获取的,而是.Net程序动态分配的。
实际上也是执行 inline asm。
它相比vb时代的老方法,优点是,函数原型可以多样化,
调用可以通过委托方式,参数中的.Net类型到本地类型由框架自动转换。
可能这个一般人可能会很少用到。
实际用途有哪些呢?
拿来玩玩,显摆显摆;)
在安全保护方面还是可以适当利用利用。
如纯开发员的角度来看,可以将这个应用到注册授权认证的代码中。
另外可以用在 .Net 安全保护工具上,加密工具加密.Net程序后自动给程序集中注入这些调用。
甚至可以把一些简单方法体在加密时就编译成native代码插入。
而且可以不用附带一个native dll。
posted on 2008-01-22 21:46 紫雨轩 .Net 阅读(5342) 评论(12) 编辑 收藏 举报