1

我试图了解在 Linux 机器上调用系统调用的方式。为此,我在 QEMU 模拟器上运行了一台带有Linux 3.0.43 内核的客户机。

为了知道系统调用号,我在 qemu 中检测了中断函数(do_interrupt_all()target-i386/seg_helper.c--- 不是很重要)。基本上每当我收到一个 int 0x80 中断时,我都会在 EAX 寄存器中打印该值。运行的输出给出了系统调用号。我希望首先对 init 进程进行 exec 系统调用。然后是一个 fork 和一些 `brk 系统调用。但是,我不确定这是否是我得到的。我在这里打印前 100 个系统调用号。我的客人是 64 位机器。是我的内核的在线代码探索。

 : 11
 : 45
 : 33
 : 192
 : 33
 : 5
 : 197
 : 192
 : 6
 : 33
 : 5
 : 3
 : 197
 : 192
 : 192
 : 192
 : 6
 : 192
 : 243
 : 125
 : 125
 : 125
 : 91
 : 122
 : 45
 : 45
 : 197
 : 5
 : 5
 : 5
 : 5
 : 221
 : 141
 : 141
 : 6
 : 5
 : 5
 : 5
 : 5
 : 5
 : 197
 : 192
 : 3
 : 3
 : 6
 : 91
 : 5
 : 197
 : 192
 : 3
 : 3
 : 6
 : 91
 : 5
 : 197
 : 192
 : 3
 : 3
 : 6
 : 91
 : 5
 : 197
 : 192
 : 3
 : 3
 : 6
 : 91
 : 5
 : 197
 : 192
 : 3
 : 3
 : 6
 : 91
 : 5
 : 197
 : 192
 : 3
 : 3
 : 6
 : 91
 : 5
 : 5
 : 197
 : 192
 : 3
 : 3
 : 6
 : 91
 : 5
 : 197
 : 192
 : 3
 : 3
 : 6
 : 91
 : 5
 : 197
4

1 回答 1

4

是的,这就是你得到的(Linux System Call Numbers64-bit Linux System Call Numbers):

  • 11 : sys_exevce, orexec的系统调用
  • 45 : sys_brk, malloc 下的东西
  • 33:sys_access
  • 192:lgetxattr

等等。

于 2013-01-16T14:27:53.357 回答