哪个linux进程处理系统调用?

时间:2014-04-05 16:01:22

标签: linux x86 kernel reverse-engineering

这可能是一个愚蠢的问题,但我正在调试一个二进制文件,gdb试图"反向工程"它达到了一个指令,它会产生一个系统调用,然后出现我想要逆向工程的效果。我假设另一个进程正在接管并完成工作,所以我想知道是否可以调试使用gdb处理系统调用的内核代码。

以下是制作系统调用的x86程序集片段(看起来它是sys_getpid):

0x00007ffff7660d3e <+14>:   movsxd rdx,edx
0x00007ffff7660d41 <+17>:   movsxd rdi,edi
0x00007ffff7660d44 <+20>:   mov    eax,0x14
0x00007ffff7660d49 <+25>:   syscall 

1 个答案:

答案 0 :(得分:3)

syscall(或sysenterint 0x80等...)机器指令用于制作syscalls,其定义由Linux kernel处理。详细信息在x86-64 ABI specification中定义。阅读Advanced Linux Programming以了解其中大部分内容。另请参阅Linux Assembly HowTo

从用户应用程序的角度来看,系统调用是一个虚拟的原子指令。

没有特定的用户空间进程正在处理系统调用,内核的工作就是处理它们,它几乎是应用程序与内核交互的唯一方式。

内核对给定进程的系统调用处理被视为系统CPU时间,例如:按time(1)

记录的系统调用列表在syscalls(2)中给出。另请参阅<asm/unistd.h><asm/unistd_64.h>等...标题。

您可以使用strace(1)来了解特定运行(某些进程)完成的系统调用序列。

另见vdso(7)