• 生活小妙招免费各类生活中的小问题知识以及音乐简谱等,是你了解世界未知知识的好地方。

exe文件是机器语言,为什么mac不能运行Windows的exe文件?

十万个为什么 空空 2024-3-29 23:42:53 5次浏览

关于问题exe 文件是机器语言,为什么 mac 不能运行 Windows 的 exe 文件?一共有 5 位热心网友为你解答:

【1】来自网友【数理土豆饼】的最佳回答:

exe 里有部分是机器语言,也就是芯片的指令集的二进制表示,还有部分是对操作系统的调用,直接运行,缺乏操作系统的对系统调用的支持响应。linux 上安装虚拟机模拟 Windows 的系统调用 应该可以运行 exe 文件的。反正在 windows 系统上安装 虚拟机 再在上边安装 linux 系统,运行 bin 文件是没有问题的。现在 windows 上有安卓虚拟机,可以直接运行安卓 app. 在 mac 上开发一个 虚拟机,安装 windows 就可以运行 exe 了。如果 exe 可以直接运行,操作系统就没有存在的价值了。操作系统就是把计算机的资源控制起来,exe 只能通过操作系统调用资源。要不系统里同时有多个 exe 在运行,彼此之间无法协调。

【2】来自网友【RGNSJM】的最佳回答:

中文是人类语言,为什么美国人听不懂?[捂脸]

【3】来自网友【速码爵士】的最佳回答:

把 exe 等同于机器指令这是很多人的误解,其实 Exe 并不完全是机器语言指令,它只是个存放机器指令的容器,本质上和 Office .doc 文件类似,exe 的后缀名在注册表里也有关联项,Windows 看到你双击了 exe 就会启动相应的装载器加载并执行。不同的是转载器内置在 win 里面。

这个文件容器里除了指令外还含有众多的其他信息,比如和执行相关的:装入内存后用于配置运行内存用的各种符号地址表格,和执行无关的各种资源:任何数据文件都可以打包进 exe 容器里。你甚至可以把任意文件添加到 exe 的屁股后面,这样的 exe 仍能正常运行。

只要 CPU 指令兼容,比如 x64 的 Mac 是完全可以运行原生的 x64 exe 的,主要问题其实只有两个,1.exe 文件装载器(把指令装到内存里配置好执行环境),2.需要各种依赖的运行库(如 user32,kernel32 等等)。

免费开源的 wine 就是专门用来干上面 2 件事的。在 Mac 下通过 homebrew 安装 wine,最新的 arm 架构的 Mac 下需要安装 crossover,然后就可以用 wine 指令把 exe 给跑起来。只要 CPU 架构一致,wine 实际是原生运行 exe 中的指令,完全不靠虚拟机。

就我而言,工作里大部分情况都在 Mac 下交叉编译开发 windows 的程序(exe 或 dll),在 Mac 下直接运行 exe 用于验证逻辑也是个硬性需求, 因此 wine 是一个非常有用的工具。

【4】来自网友【griphin】的最佳回答:

别说 windows 和 MAC 这两种截然不同的系统了,即便同样是 Windows,Win98 程序大概率都不能在 win10 下跑。

EXE 文件不是机器语言,而是是被转换成机器语言的二进制文件,也就是 01 的组合。但是不同平台对 01 的组合规则是不一样的。同样是掰手指数数,大拇指和食指的组合,欧洲人认为是二,而中国人认为是八。

抛开架构和平台不说,绝大多数的软件,并不是靠一个 EXE 文件就能跑起来的,它是一个文件团队,很多必须的资源,是系统提供的,两个不一样的系统,怎么调用?你在中国做电商,需要调用国家提供的支付环境和物流运输系统。你现在把公司搬到美国,你还能继续全国包邮,支付系统继续使用微信支付宝么?

【5】来自网友【古海 2021】的最佳回答:

这是操作系统影响的!

exe 文件和 mac 可执行文件,在底层,都是硬件能认识的二进制格式指令。

但指令的执行不仅仅有可执行文件里二进制指令就能运行,它还得调用系统里库的二进制指令,但 windows 的 exe 文件在 mac 系统里就找不到需要的库指令,因为寻找方法和格式都固定了,反过来也一样。

再另外每种文件格式都有自己的文性属性识别标记,它 mac 打开 exe 文件,不给执行属性,你就没得运行可能。

当然你是可以做到在 mac 里摸拟一个 exe 运行环境,让 exe 在里面运行,反之亦然。

喜欢 (0)