|
发表于 2008-11-5 13:49:02
|
显示全部楼层
首先,程序不等于代码,也就是说,一个执行程序除了代码之外,还有一些包装性的信息,通俗的解释就是windows .exe 程序和 Linux elf 的结构不同。
其次,把上面的打包解开之后,都是x86架构,指令应该一样了吧?貌似确实,但是你也知道,dll和so动态库的原理是完全不同的。
再次,就算全部都使用静态连接,OK,但是系统调用具体是怎么实现的呢?哦,我们简单的把它们解释为:通过中断或者其它各种手段向内核发起一个命令,然后由内核去完成。那么windows内核跟linux内核又不同,用户程序访问内核的方式又不同,所以这个printf的实现肯定又完全不相同。所以最终都完全不同了。
所以你如果阅读 ReactOS, wine, ndiswrapper 等等代码,会发现,在linux下运行windows程序,大方面来说无非就是解决上面三个问题,当然还有其它一些问题。 |
|