码迷,mamicode.com
首页 > 系统相关 > 详细

linux内核分析第六次实验

时间:2016-04-03 13:07:27      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

使用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内核分析第六次实验

标签:

原文地址:http://www.cnblogs.com/20135118lpy/p/5349612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!