Linux内核分析

Linux系统调用始末

2017-03-22  本文已影响33人  athorn

陈松 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

当然,如果确实对参数的传递,ebx、ecx、edx、esi、edi、ebp这几个寄存器究竟是从左到右还是从右到左地存储我们传递的参数,实际上是arg1对应ebx,arg2对应ecx,以此类推。function(arg1, arg2, arg3, arg4, arg5, arg6);

调试是软件开发过程中一个必不可少的环节,在 Linux 内核开发的过程中也不可避免地会面对如何调试内核的问题。但是,Linux 系统的开发者出于保证内核代码正确性的考虑,不愿意在 Linux 内核源代码树中加入一个调试器。他们认为内核中的调试器会误导开发者,从而引入不良的修正[1]。所以对 Linux 内核进行调试一直是个令内核程序员感到棘手的问题,调试工作的艰苦性是内核级的开发区别于用户级开发的一个显著特点。

可以看到,我们在sys_getpid处设置了断点。

c运行,由于我们正常的启动流程,系统并不会触发断点。

执行我们想要的程序,因为牵涉到系统调用,故运行到断点处停下。

syscall_exit:
    LOCKDEP_SYS_EXIT
    DISABLE_INTERRUPTS(CLBR_ANY)    # make sure we don't miss an interrupt
                                    # setting need_resched or sigpending
                                    # between sampling and the iret
    TRACE_IRQS_OFF
    movl TI_flags(%ebp), %ecx
    testl $_TIF_ALLWORK_MASK, %ecx  # current->work
    jne syscall_exit_work

接下来,代码的运行过程,像是进入了一个混沌世界。


通过跟踪,可以发现,大概系统执行了INTERRUPT_RETURN之后便返回了。


至于调度点,暂时还未发现。

上一篇 下一篇

猜你喜欢

热点阅读