mono linux 运行机制,linux – Mono如何神奇?
我正在学习C#,所以我制作了一个名为Hello,World!的C#程序,然后用mono-csc编译并用mono运行它:
$mono-csc Hello.cs
$mono Hello.exe
Hello, World!
我注意到当我用bash命中TAB时,Hello.exe被标记为可执行文件.实际上,它仅通过加载文件名的shell运行!
Hello.exe不是带有趣文件扩展名的ELF文件:
$readelf -a Hello.exe
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start
$xxd Hello.exe | head -n1
00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000 MZ..............
MZ意味着它是Microsoft Windows静态链接的可执行文件.将它放到Windows机器上,它将(应该)运行.
我安装了葡萄酒,但葡萄酒,作为Windows应用程序的兼容层,运行Hello.exe作为单声道并且直接执行它需要大约5倍的时间,所以它不是运行它的葡萄酒.
我假设有一些单声道内核模块安装了mono来拦截exec系统调用/ s,或者捕获以4D 5A开头的二进制文件,但是lsmod | grep mono和friends返回错误.
这里发生了什么,内核如何知道这个可执行文件是特殊的?
只是为了证明它不是我的shell工作魔法,我使用the Crap Shell(也就是sh)运行它并且它仍然本机运行.
这是一个完整的程序,因为评论者很好奇:
using System;
class Hello {
///
/// The main entry point for the application
///
[STAThread]
public static void Main(string[] args) {
System.Console.Write("Hello, World!\n");
}
}
解决方法:
这是binfmt_misc在行动:它允许内核被告知如何运行它不知道的二进制文件.查看/ proc / sys / fs / binfmt_misc的内容;在那里看到的文件中,应该解释如何运行Mono二进制文件:
enabled
interpreter /usr/lib/binfmt-support/run-detectors
flags:
offset 0
magic 4d5a
(在Debian系统上).这告诉内核应该为运行检测器提供以MZ(4d5a)开头的二进制文件.后者计算出是使用Mono还是Wine来运行二进制文件.
可以随时添加,删除,启用和禁用二进制类型;请参阅上面的文档以获取详细信息(语义令人惊讶,此处使用的虚拟文件系统的行为与标准文件系统完全不同). / proc / sys / fs / binfmt_misc / status给出全局状态,每个二进制“描述符”显示其各自的状态.禁用binfmt_misc的另一种方法是卸载其内核模块(如果它是作为模块构建的);这也意味着可以将其列入黑名单以完全避免它.
此功能允许支持新的二进制类型,例如MZ可执行文件(包括Windows PE和PE二进制文件,还包括DOS和OS / 2二进制文件!),Java JAR文件……它还允许支持已知的二进制类型新架构,通常使用Qemu;因此,使用适当的库,您可以在Intel处理器上透明地运行ARM Linux二进制文件!
您的问题源于交叉编译,尽管在.NET意义上,这引发了对binfmt_misc的警告:当您尝试在可以运行交叉编译二进制文件的系统上进行交叉编译时,某些配置脚本会出现异常.通常,检测交叉编译涉及构建二进制文件并尝试运行它;如果它运行,你不是交叉编译,如果没有,你是(或你的编译器坏了).在这种情况下,通常可以通过显式指定构建和主机架构来修复autoconf脚本,但有时您必须暂时禁用binfmt_misc …
标签:linux,mono,executable,cross-compilation
来源: https://codeday.me/bug/20190808/1621428.html
mono linux 运行机制,linux – Mono如何神奇?相关推荐
- linux运行隐藏文件,Linux下如何隐藏文件_网站服务器运行维护,Linux,隐藏文件
linux系统怎样安装软件_网站服务器运行维护 linux系统安装软件的方法:1.使用apt命令进行安装,如[apt install app_name]:2.使用rpm命令进行安装,如[rpm -i ...
- linux sysctl机制,Linux操作系统sysctl机制的思想与实现
续<linux的netlink机制>:其实只要同时提供实现一个内核netlink的内核模块和一个定制用户策略的用户空间netlink程序,你就可以完全控制linux内核了,这里内核的net ...
- 深度linux运行wine,Linux系统中的Wine和deepin wine是什么有什么区别
我们办公和家用的系统一般都是Windows系统,很少用到其他系统.除了常用的Windows系统外,还有其他的,如Linux系统.该系统是开放源码的UNIX操作系统,主要运行在大型服务器和平台上. 有些 ...
- linux运行blast,linux blast
建库 减压后,改名为blast,并在blas目录在建立db文件 1,建立数据库 makeblastdb -in db.fasta -dbtype nucl(prot) -parse_seqids -h ...
- linux运行倩女,linux启动脚本添加引用jdk版本倩女
编译后,退出VisualBasic: 再次运行Project1.exe: 天啦,居然会有错误信息,类已不再支持原来接口 DoUntilDataList.EOF第一,您在屏幕上看不到任何正在发生的事情, ...
- mono 直接运行exe linux,mono的安装(简单使用exe文件)
Linux下mono的安装 第一:下载最新的mono源代码及其所需要的其它代码:(8个) 以及所需要的 fontconfig-2.7.3.tar.gz freetype-2.3.11.tar.gz g ...
- linux 的多进程运行机制,Linux 多进程-2
揭秘文件描述符的本质 1. 文件描述符的本质是数组元素的下标 右侧的表称为 i 节点表,在整个系统中只有1张.该表可以视为结构体数组,该数组的一个元素对应于一个物理文件. 中间的表称为文件表,在整个系 ...
- linux模块化机制,Linux模块化机制和module_init
> 引子:模块化机制优点 模块化机制(module)是Linux系统的一大创新,是Linux驱动开发和运行的基础(当然,module并不仅仅是支撑驱动).其优点在于: 1.在系统运行动态加载模块 ...
- linux运行rtsp,Linux下的实时流媒体编程(RTP,RTCP,RTSP)2
RTP 是目前解决流媒体实时传输问题的最好办法,如果需要在Linux平台上进行实时流媒体编程,可以考虑使用一些开放源代码的RTP库,如LIBRTP. JRTPLIB等.JRTPLIB是一个面向对象的R ...
最新文章
- 痛苦是能让人成长的,所以不要害怕遇到痛苦
- 6.TMG2010公网发布
- 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
- Memcached主从复制+keepalived高可用架构
- c语言variant是什么变量,介绍一些常用数据类型的使用。先定义一些常见类型变量借以.doc...
- css3 menu 手机菜单3
- 丰田chr内外循环怎么区分_雨季车窗起雾怎么办?空调内外循环别错用
- Unty中通过镜像优化HDRI全景图体积
- Android Webview 设置Cookie问题
- python拟合直线的斜率_Python:直线,斜率k是已知的,一点P1是已知的,长度P1P2是已知的,如何得到P2?...
- Keil黑色背景页面设置
- 计算机里面有盐有糖O(∩_∩)O哈哈~
- 前端、后台、客户端以及服务器
- 这个是可以将得到速查编码的存储过程 如 中国人 可以得到 ZGR
- CMWAP和CMNET 的区别与适用范围
- APl DOM文档对象模型
- Excel - 学习 - 笔记2: Excel 数据格式
- WebGl 球面计算公式
- Python:如何在代码完成时发出警报声?
- 笔记本计算机虚拟技术,教大家联想笔记本电脑如何打开Intel 虚拟化技术
热门文章
- html checkbox 透明度,【求助】关于表达式checkbox中不透明度的设置
- python匿名函数使用
- html5移动端开发(rem和媒体查询@media)
- Kotlin 条件控制(六)
- Html5中的徽章,CSS 常见样式 特殊用法 贯穿线徽章箭头
- 怎么看电脑配置高不高_辣椒产量高不高?关键看播种前的种子处理,你知道怎么做吗?...
- linux乱码的文件怎么删除,如何删除Linux的乱码文件
- 自检代码中trustmanager漏洞_Windows内核漏洞利用教程
- c语言求e近似值精度在10e6,中石油2013秋季学期《C语言》补考在线适用于2014年4月...
- php 5.4.39 安装,Lamp 安装(CentOS6.6, php-5.4.39, httpd-2.4.12, mysql-5.6.24)