现在我们的日子工作已离不开电脑了,在常常和电脑打交道的小伙伴会发现,exe里边寄存的汇编指令,不能在 x86下的Linux上运转。
电脑的许多根底功用是由操作体系管控的,你有必要经由操作体系才能用这些功用,而不同体系的接口明显不相同。程序现已编译成了运用这个体系的接口,在另一个体系上明显底子不存在那些接口。
假如想运转exe的话,要点其实不在于exe文件格局,以及怎样调入内存。要点在于能够体系能不能供给这些体系调用,可这谈何容易?不仅仅是DirectX,Windows中还有许多相似的COM,比方ADO之类的,都无法用DLL调用的方法处理。
Linux 原生运转 exe 最大的妨碍是 exe 文件大多是为 Windows 预备的,调用了 Windows 特有的 API,或许直接便是程序。老windows中止号是0x2e,现在体系调用x86 都不走中止了,有专门的快速切换指令,I686下用sysrenter,x64用syscall。问题是中止号相同也没用。传参约好不同,还有SSDT里边约好的体系调用功用号也不相同。
即使linux能够载入PE格局的可执行文件,仍是需求出示相应的运转时环境才能够。
一个是因为pe和elf都不只包括二进制代码,还含有其他信息,所以pe和elf都是具有必定格局的,而linux内核只要elf的loader,没有pe的loader。