假设我有一个
A.exe
文件,我想在我的 Windows 机器 X 上运行它。
我想知道这个A.exe
文件如何与X中的Windows内核函数交互? A.exe
文件是否已包含将在其自己的二进制文件中调用的所有 Windows 内核函数?或者A.exe
会去机器X中查找内核函数的地址并调用它?
同样,.bin 文件如何与 Linux 内核函数交互?
可执行文件或库将执行特殊指令,例如
int 0x80
或 sysenter
并引发异常。然后机器查找名为IDT的表(对于int 0x80
)或输入MSR中指定的系统调用处理程序(对于sysenter
)并开始执行系统调用处理函数
.exe 文件将链接到 Windows .dll 文件并调用这些文件(通过将 DLL 加载到内存,然后在 DLL 中使用名称->内存映射)。 一些 .dll 调用将仅保留在用户空间中并进行计算/返回值。 有些会调用中断,这将导致操作系统实现的中断处理程序运行。 该中断处理程序有权提高其优先级并访问所有操作系统的内存。 它可以直接执行任何进一步的操作,也可以安排操作系统线程稍后执行这些操作。 但所有这些函数的代码都在 DLL 中。 中断处理程序的代码以及它可能调用或导致调用的任何例程位于加载操作系统时启动的其他文件中。