因此,当您打开PE(.exe)或调用CreateProcess(来自Win32 API)时,将遵循以下过程:
文件头,图像扇区以及exe链接的DLL将映射到进程自有虚拟内存。
CPU在程序起始地址开始执行。
所以我的问题就出现了 - PE图像中的所有指令都使用了一个相对于它自己的专用地址空间(虚拟内存)的地址,该地址以0开头。有时候这个内存是由Windows在辅助内存中的某个地方分页的(HDD)。 CPU如何找出RAM中的真实物理地址?另外,Windows如何通过优先级从一个线程切换到另一个线程,以支持多线程,并且当CPU未完全使用时发送空闲指令?在所有这些发现之后,我开始认为实际上存储在PE文件中的机器代码并不是由CPU直接执行,而是在某些Windows托管环境中执行?这可能是真的,如果是这样,这会减慢执行速度吗?
编辑:好的,所以问题应该改写如下:“Windows进程是在核心布局程序中执行还是直接在CPU上执行?”。我得到了我想要的答案,所以无论如何问题都解决了。
答案 0 :(得分:3)
完整的答案将填满整本书,但简而言之: