linux内核分析第六次实验

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux内核分析第六次实验相关的知识,希望对你有一定的参考价值。

使用gdb跟踪创建新进程的过程

rm menu -rf git clone https://github.com/mengning/menu.git 

mv test_fork.c test.c  
执行fork,可以看到父进程子进程都输出了信息。

技术分享

使用gdb进行调试

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

gdb
file linux-3.18.6/vmlinux
target remote:1234

开始设置断点

技术分享

 技术分享

技术分享

新进程是从哪里开始执行的?为什么从哪里能顺利执行下去?即执行起点与内核堆栈如何保证一致。

ret_ from_ fork决定了新进程的第一条指令地址。子进程从ret_ from_ fork处开始执行。因为在ret_ from_ fork之前,也就是在copy_ thread()函数中* childregs = * current_ pt_ regs();该句将父进程的regs参数赋值到子进程的内核堆栈。* childregs的类型为pt_ regs,里面存放了SAVE_ ALL中压入栈的参数,因此在之后的RESTORE ALL中能顺利执行下去。

以上是关于linux内核分析第六次实验的主要内容,如果未能解决你的问题,请参考以下文章

第六周

Linux内核分析-使用gdb跟踪调试内核从start_kernel到init进程启动

Linux内核分析之跟踪分析Linux内核的启动过程

《Linux内核分析》第六周学习总结

《Linux内核分析》第六周学习笔记

linux内核分析第六周-分析Linux内核创建一个新进程的过程