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