【发布时间】:2013-06-26 17:03:43
【问题描述】:
当编译为目标代码,然后目标文件以静态或其他方式链接在一起时,它们被放置在[VAD][1] 中,至少我在可追溯到 2000 年代后期的现代 Windows 操作系统上肯定知道这一点。我的猜测是,这是我的想法,但我假设动态链接的内核库与主可执行文件一起放置在 TBL 分页虚拟地址空间中,如果存在动态链接库,如 C 的标准,它们与主可执行文件链接在一起,但不是静态的,如[SDL][2]。那么可执行文件如何通过链接的内核库访问受保护的内存,如驱动程序等?
希望我的问题不会太混乱。
基本上,我想问的最简短的问题是:
编译/链接的可执行文件和随附的库/API 如何实际到达操作系统 API、内核 API 或运行时硬件操作所需的其他系统软件或与之交互?
【问题讨论】:
-
参见例如stackoverflow.com/questions/499188/… ,大多数传统操作系统和 CPU 以类似的方式工作。
-
这并没有解释超出它的过程,例如设备驱动程序和调用之间完成的调度。总而言之,它没有给我想要的答案。
-
那么您可能正在寻找这样一个事实,即 CPU 具有多种操作模式,一种是特权模式(操作系统在其中运行),它可以访问 CPU 和硬件的所有功能一个是非特权的(用户进程在其中运行),并且用户进程有一种简单的方法可以调用在特权模式下运行的代码并在它们之间来回复制数据。或者您在询问现代内核和 CPU 的基本构造以及可能复杂的细节,这是一个非常大的话题。