linux - 系统调用实际上是如何在 Linux 上发生的?

标签 linux linux-kernel internals system-calls

受到这个问题的启发

How can I force GDB to disassemble?

与此相关

What is INT 21h?

在 linux 下,一个实际的系统调用是如何发生的?在执行调用时会发生什么,直到调用实际的内核例程?

最佳答案

假设我们谈论的是 x86:

  1. ID of the system call存入EAX寄存器
  2. 系统调用所需的任何参数都存放在locations dictated by the system call中。 .例如,一些系统调用希望它们的参数驻留在 EBX 寄存器中。其他人可能希望他们的论点位于堆栈的顶部。
  3. INT 0x80 中断被调用。
  4. Linux 内核为由 EAX 寄存器中的 ID 标识的系统调用提供服务,并将所有结果存放在预先确定的位置。
  5. 调用代码使用任何结果。

我可能对此有点生疏,已经有几年了......

关于linux - 系统调用实际上是如何在 Linux 上发生的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1245817/

相关文章:

linux - 使用 flex 生成的文件时出现问题

java - 虚拟内存每秒增加 - 内存不足错误

linux - 'echo' 无限次调用 .write 函数

Python 代码对象——它们有什么用?

linux - 如何在 Macintosh 或 Linux 中模拟 OSPF 路由表?

c - 使用 select() 函数发送和接收数据

memory - 如何获得CR3值?

linux - 详解mkmakefile生成的Makefile(Linux内核、buildroot、busybox)

perl - 尝试通过 Perl 中的词法绑定(bind)本地化外部包变量

python - 确定给定的 Python 模块是否为内置模块