可执行二进制文件和操作系统



我知道可执行文件(例如:适用于Windows的.exe)是二进制文件。我知道十六进制文件和汇编等等。我也知道操作系统API的。从理论上讲,我可以完全用使用操作系统API的汇编代码编写web浏览器,用NASM进行汇编并获得可执行文件。但我的问题是,操作系统如何控制应用程序?例如,我可以在Windows上有一个可执行文件,它会写入视频内存,并用随机的东西填充屏幕。我已经尝试过了(实际上),Windows停止了应用程序。它是如何控制应用程序的?此外,如果我有一个linux可执行文件,并且我试图用完全相同的硬件在Windows机器上运行它,理论上,它应该可以工作(尽管它不会使用任何Windows API),因为处理器架构是相同的,但它不能。操作系统究竟是如何"控制"二进制文件的?

操作系统,特别是windows和linux,保护其他应用程序和操作系统本身不受应用程序的影响。因此,有一个保护层,理想情况下应用程序不能以用户身份运行。

如果你想在屏幕上显示像素,你必须让操作系统帮你完成。如果操作系统允许一种方式进行打孔(调用mmap可能必须以root身份运行),那么你可以随意丢弃计算机,是的。计划/设计是不让你直接访问,你得到了一个虚拟空间,一个沙盒,供你的应用程序玩,你有一个虚拟地址空间,里面有一些ram,你可以随意读写,但你超出了这个范围,你需要关闭或至少以某种方式处理。

至于你用什么语言编写应用程序,是的,如果它是一个普通的windows程序或linux程序,那么你可以做任何事情来为该目标生成机器代码,asm、ada、C等。如果你谈论的是特定的虚拟机(java、python),那么你的选择就会更加有限。如果你想在你的空间里做更多的事情,比如有某种输出而不是返回值,那么你必须按照系统需要的方式进行系统调用,这是特定于目标和操作系统的。同样,你可以用你正在使用的任何语言或你可以链接的库获得正确的指令、寄存器或内存结构,或者操作系统对调用所需的任何东西,然后你的程序的其余部分可以用任何语言,是的,你绝对想用nasm用汇编语言编写一个网络浏览器,这是完全可行的。必须创建操作系统支持的二进制格式,并按照系统要求的方式进行系统调用。

相关内容