我知道可执行文件(例如:Windows的.exe)是二进制文件。我知道hex文件和汇编等等。我也知道OS API的问题。从理论上讲,我可以完全用汇编代码编写一个Web浏览器,它使用OS API,用NASM汇编并获得可执行文件。但我的问题是,操作系统如何控制应用程序?例如,我可以在Windows上有一个可执行文件写入视频内存,并用随机的东西填充屏幕。我已经尝试了(实际上)并且Windows暂停了应用程序。它如何控制应用程序?此外,如果我有一个Linux可执行文件,并且我试图在具有完全相同硬件的Windows机器上运行它,理论上它应该可以工作(尽管它不会使用任何Windows API),因为处理器架构是一样的,但它不能。操作系统如何控制'二进制文件?
答案 0 :(得分:0)
操作系统,特别是Windows和Linux保护其他应用程序和操作系统本身免受应用程序的侵害。因此,有一个保护层,理想情况下,应用程序无法以用户身份运行。
您想在屏幕上放置像素,您必须要求操作系统为您执行此操作。如果操作系统允许一种穿透方式(调用mmap可能必须以root身份运行),那么你可以随意丢弃计算机,是的。计划/设计是让你无法直接访问,你有一个虚拟空间,一个沙箱,供你的应用程序使用,你有一个虚拟地址空间,有一些你可以随意读写的ram,但是你去了除此之外,你需要关闭或至少以某种方式处理。
至于您使用什么语言编写应用程序,如果它是普通的Windows程序或Linux程序,那么您可以做任何事情来为该目标生成机器代码,asm,ada,C等。如果您正在谈论特定的虚拟机(java,python)然后你的选择变得更加有限。如果你想做的不仅仅是在你的空间中进行游戏,比如有一些输出而不是返回值,那么你必须以系统需要它们的方式进行系统调用,这是目标和操作系统特定的。再次,你得到了正确的指令或注册或内存结构或操作系统所需的任何内容,无论你使用的语言是什么,或者你可以链接的库,那么你的程序的其余部分可以是任何语言,绝对是您想使用nasm以汇编语言编写Web浏览器,完全可行。必须创建os支持的二进制格式,并按照系统要求的方式根据需要进行系统调用。