直接在.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。

时间: 2024-09-25 07:54:27

直接在.Net程序(C#)中执行 native code的相关文章

VC++ 2005 中编写 Native code 的问题

问题描述 请问用VisualStudio2005是否可以编写非托管的(不依赖于CLR的程序)C++程序?还有就是SideBySide到底是什么东东?另外,如果在VS2005中,有关STL.MFC等VC6.0上的库是否是完完全全的继承过来了? 解决方案 解决方案二:路过帮顶=============11月6日,论坛升级公告,积分已经做了调整!http://topic.csdn.net/u/20081107/11/b27dc75f-14b1-4594-9de3-5b18d9e36a11.html此次

在Web页面中执行Windows程序

web|window|程序|页面|执行 现在许多公司都面临一个难题:如何在Web环境中执行存在的Windows应用程序.这里就介绍实现这个功能的技术,它争取对代 码做最小的改变,完成在Windows环境中应做的一切. 现存的Windows应用程序 这里想要在Web中执行的Windows例子程序是非常简单的,它是用VB编写的,其中有一个表单.运行时,在表单上显示雇员的信 息,这些信息来源于Access数据库的一个表.表单上设有First.Next.Previous 和 Last按钮,从而允许用户浏

Asp.Net在Web应用程序中执行计划任务(多线程)

asp.net|web|程序|多线程|执行 在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务.实现计划任务的方法也有很多,可以采用SQLAgent执行存储过程来实现,也可以采用Windows任务调度程序来实现,也可以使用Windows服务来完成我们的计划任务,这些方法都是很好的解决方案.但是,对于Web应用程序来说,这些方法实现起来并不是很简单的,主机服务提供商或者不能直接提供这样的服务

教你在Java中执行其它程序

在编写Java程序时,有时候需要在Java程序中执行另外一个程序. 1.启动程序Java提供了两种方法用来启动其它程序: (1)使用Runtime的exec()方法 (2)使用ProcessBuilder的start()方法 不管在哪种操作系统下,程序具有基本类似的一些属性.一个程序启动后就程序操作系统的一个进程 ,进程在执行的时候有自己的环境变量.有自己的工作目录.Runtime和ProcessBuilder提供了不同的方 式来启动程序,设置启动参数.环境变量和工作目录. 能够在Java中执行

以Linux的shell程序为入口到Teradata中执行SQL

Linux的Shell程序本身并不能直接访问Teradata,它是通过Teradata的BTEQ功能来间接实现访问.这个BTEQ相当于Oracle的SQLPLUS,总之是一个命令行工具. Teradata厂商提供Linux上的BTEQ安装包(其依赖的包也要安装). 下列代码不妨保存为"test_td.sh": cat <<! | /usr/bin/bteq .LOGON 192.168.9.100/td_user,123456; select * from my_db.my

select-SQL可以再客户端执行不能在程序中执行,求大神指点?急

问题描述 SQL可以再客户端执行不能在程序中执行,求大神指点?急 SQL如下: select distinct b.COLUMN_NAME,b.comments,a.column_id from user_tab_columns a,user_col_comments b where a.column_name=b.column_name and b.table_name=upper('YFRAME_STU') order by a.column_id; 解决方案 upper('YFRAME_S

区分execl与system——应用程序中执行命令

execl:相关函数:fork, execle, execlp, execv, execve, execvp表头文件:#include <unistd.h>函数定义:int execl(const char *path, const char *arg, ...);函数说明:execl()用来执行参数path字符串所代表的文件路径, 接下来的参数代表执行该文件时传递的argv[0],argv[1].....是后一个参数必须用空指针NULL作结束返回值    :成功则不返回值, 失败返回-1,

java-为什么我在Java类中执行SQL语句,程序没错,而数据库却没执行??

问题描述 为什么我在Java类中执行SQL语句,程序没错,而数据库却没执行?? 解决方案 不知道画了删除线是什么意思,你确认这些代码有效么 解决方案二: 你用的什么啊?Hibernate?还是别的框架啊?Hibernate的话,可能是事务没有提交,你执行flush方法就可以了 解决方案三: 代码可以贴全一点吗?看不到关键部分 解决方案四: 代码内容太少了,你的Sqlca是个什么,最起码给个声明. 解决方案五: 你的sqlca是什么啊? 解决方案六: executeSQL方法问题 这个方法只能是查

在Web页面中执行Windows程序(转)

在Web页面中执行Windows程序 现在许多公司都面临一个难题:如何在Web环境中执行存在的Windows应用程序.这里就介绍实现这个功能的技术,它争取对代码做最小的改变,完成在Windows环境中应做的一切.现存的Windows应用程序 这里想要在Web中执行的Windows例子程序是非常简单的,它是用VB编写的,其中有一个表单.运行时,在表单上显示雇员的信息,这些信息来源于Access数据库的一个表.表单上设有First.Next.Previous 和 Last按钮,从而允许用户浏览记录.