只是一个概念性问题。编译程序文件并将其与所需的库链接到exe文件中。现在我理解的这个文件是机器代码,处理器可以理解。我很好奇的是操作系统如何发挥作用。我会认为操作系统实际上解释了exe文件?我的意思是如果我在汇编中编写程序,我可以在任何地方对内存块进行修改,操作系统是否可以防止这种情况?
答案 0 :(得分:2)
是的OS(特别是 loader )解析可执行文件格式。在Windows上,这是PE (Portable Executable)。在Linux上,这通常是ELF (Executable and Linkable Format)文件。通常,操作系统并不关心实际的代码。
加载程序确定磁盘上程序的哪些块进入内存中的哪个位置。然后,它分配这些虚拟地址范围,并将文件的相关部分复制到位。然后它执行所需的任何relocations,最后跳转到入口点(也以文件格式指定。)
要记住的是,大多数现代操作系统都通过Virtual Memory保护进程。这意味着每个进程都在其自己的虚拟地址空间中隔离。因此,如果记事本写入地址0x700000,他不会影响Word在0x700000处的变量。顺便说一下,这些虚拟地址的工作方式实际上映射到了RAM中完全不同的地址。
在x86平台上,此安全性由处理器的Protected Mode和分页功能提供。
关键是硬件阻止你做任何“坏事”。