exe里面存放的汇编指令,不能在 x86下的Linux上运行 当前热议

2023-03-21 14:45:39 来源:卓越科技


(相关资料图)

现在大家的生活办公已经离不开电脑了,在经常和电脑打交道的小伙伴会发现,exe里面存放的汇编指令,不能在 x86下的Linux上运行。

电脑的大量基础功能是由操作系统管控的,你必须经由操作系统才能使用这些功能,而不同系统的接口显然不一样。程序已经编译成了使用这个系统的接口,在另一个系统上显然根本不存在那些接口。

如果想运行exe的话,重点其实不在于exe文件格式,以及怎么调入内存。重点在于可以系统能不能提供这些系统调用,可这谈何容易?不仅仅是DirectX,Windows中还有很多类似的COM,比如ADO之类的,都无法用DLL调用的方式解决。

Linux原生运行exe最大的障碍是exe文件大多是为Windows准备的,调用了Windows特有的API,或者直接就是.NET程序。老windows中断号是0x2e,现在系统调用x86 都不走中断了,有专门的快速切换指令,I686下用sysrenter,x64用syscall。问题是中断号一样也没用。传参约定不同,还有SSDT里面约定的系统调用功能号也不一样。

即便linux能够载入PE格式的可执行文件,还是需要提供相应的运行时环境才可以。

一个是因为pe和elf都不只包含二进制代码,还含有其他信息,所以pe和elf都是具有一定格式的,而linux内核只有elf的loader,没有pe的loader。

举报/反馈

关键词:

推荐内容