当前位置: 首页 > news >正文

C#嵌入x86汇编——一个GPIO接口的实现

始进入工业自动化,买的工控机带有GPIO接口,可用于直接控制继电器。

从厂家拿到接口手册一看,居然是汇编直接操作端口,基本上是IN/OUT指令了。接口很简单,计算位移,读取;计算位移,写入。

这种接口,常见有四种办法,分别是四种语言实现,一是直接写ASM,不过要公开给C#做的应用程序调用,很不容易,另外三种是C/C++/Delphi嵌入汇编,倒是问题不大。

接口实在是小,不想大动干戈,所以想了别的办法。

第五种,用C++/CLI,这也是一个不错的主意。但是我甚至想省掉这个接口DLL,于是有了第六种办法:C#嵌入x86汇编。

C#是没办法像C/C++/Delphi那样直接嵌入x86汇编的,所以需要做点手脚。

在汇编里面,我们为了修改一个软件经常找一块空白区域来写汇编代码,然后Jmp过去执行。(不明白这一句话的可以跳过,或者去看雪论坛)

但是显然要在C#代码里面这么做很不现实,即使用C/C++编译得到obj,C#也没办法链接这个obj。(这个涉及编译的也可以跳过)

回头一想(其实不是现在想,07年就做过C#嵌入汇编),其实C#也跑在x86上,IL指令最终还是要编译成x86汇编指令的,我们应该可以这些写汇编指令,所需要的只是一块空间而已。

我们可以申请一块非托管空间嘛,于是有:

// 分配内存var ptr = Marshal.AllocHGlobal(code.Length);

有了空间,我们就可以把二进制的汇编指令给写进去啦:

Marshal.Copy(code, 0, ptr, code.Length);

然后呢?.Net提供一个途径,让我们可以把一个内存指针转为一个委托(一直都说.Net的委托其实就是C/C++的函数指针哈):

return (T)(Object)Marshal.GetDelegateForFunctionPointer(ptr, typeof (T));

那么,剩下的问题,就是如何把汇编转为二进制了!

这个我们是不能像C/C++/Delphi那样直接写汇编指令的,所以得走点弯路。

我的做法是用OD随便打开一个程序,在上面直接写汇编代码,然后把汇编的十六进制复制出来,放到C#代码中。

剩下的就不多说了,直接上代码吧!

GPIO接口实现

http://www.jsqmd.com/news/1119636/

相关文章:

  • AI助手选型:跨文档语义对齐与技术术语精准复用实战指南
  • Linux gzip 命令实战:从基础压缩到高效归档
  • E-Hentai漫画批量下载:告别手动保存的高效归档方案
  • 【IJCV 2026 顶刊】最新研究: 中国学者提出图像分割物理正则化损失函数,图像分割技术迎来“物理+AI”新范式!
  • K-Diffusion终极指南:5分钟掌握PyTorch扩散模型实战
  • 【Linux网络编程】传输层协议TCP
  • [DeepAgents:LangChain的Harness-04]TodoListMiddleware的任务拆解与状态流转
  • 逆向工程实战:巧用调试器数据窗口追踪加密密钥
  • 从零到一:浏览器脚本如何解决漫画批量下载的技术难题
  • Claude Code + IDEA 的沉浸式编程方案
  • Tailor高级技巧:如何用Python脚本处理裁剪后的hprof数据
  • 深度实战:Hindsight AI代理内存系统的7个高效性能调优策略
  • 工业级-40°C~125°C+10µA静态电流:SN74LVC1G07DBVR的低功耗宽温逻辑器件
  • Java计算机毕设之智能化商超收银折扣核算管理系统的设计与实现 基于 SpringBoot 的商场动态折扣更新管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • C# 两个list,查询属性相等的数据
  • E-Hentai Downloader:高效漫画资源管理与智能下载全攻略
  • 如何用MusePose实现虚拟人舞蹈视频生成:从姿态对齐到高质量输出的完整指南
  • 3个步骤解锁BilibiliDown:让B站视频成为你的永久数字资产
  • 小龙虾技能-10-ai-llm-05_ModelSwitcher_模型切换
  • 卷积的学习
  • 冒险岛游戏资源提取器WzComparerR2:解密游戏素材的终极指南
  • 解锁音乐无限可能:Spotube插件化音乐流媒体体验指南
  • 一个装X的架构师,通过建文件夹就能亮瞎你的狗眼... ——传说中的弦哥
  • 数字IC设计流程及术语
  • C语言中的操作符详解(含三目表达式和逗号表达式)
  • 中断系统与外部中断EXTI
  • E-Hentai-Downloader:高效图库资源管理工具全解析
  • 3分钟掌握E-Hentai漫画批量下载:从零配置到高效管理的完整指南 [特殊字符]
  • 当Source引擎遇上Blender:如何让游戏资源在3D创作中重生?
  • 终极免费音乐解析工具:一个PHP接口搞定四大音乐平台