【问题标题】:Linux system call invocation for x86x86 的 Linux 系统调用调用
【发布时间】:2012-12-30 21:26:19
【问题描述】:

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

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

 : 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

【问题讨论】:

    标签: linux assembly linux-kernel system-calls qemu


    【解决方案1】:

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

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

    等等。

    【讨论】:

    • 还有一件事...... sys_access 和 lgetxattr 系统调用在启动时有什么用??
    • 哦,是的......我后来意识到了......我的愚蠢错误是误读了系统调用页面lxr.linux.no/#linux+v3.0.43/arch/x86/kernel/syscall_table_32.S上的行号作为系统调用号。系统调用号写在右侧。 :)
    • @prathmesh.kallurkar:哈。好吧,希望你一切顺利。
    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2016-05-12
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多