使用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中能顺利执行下去。

最新文章

  1. 第二天ci项目规划 数据库设计
  2. C和指针 第四章 习题
  3. Laravel项目目录结构说明
  4. heartbeat安装与配置
  5. Routine Problem(数学)
  6. jQuery实现隔行变色
  7. 在Ubuntu 64位OS上运行hadoop2.2.0[重新编译hadoop]
  8. 二叉查找树的查找、插入和删除 - Java实现
  9. QTimer源码分析(以Windows下实现为例)
  10. NHibernate遇到的问题集 持续更新。
  11. [转] 看懂UML类图和时序图
  12. (转)iOS7界面设计规范(4) - UI基础 - 布局
  13. 【笔记】shell下的主要工具
  14. iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
  15. 利用kibana插件对Elasticsearch查询
  16. tensorflow学习001——MNIST
  17. 使用Maven搭建SpringMVC
  18. 从harbor部署到在k8s中使用
  19. 【题解】Luogu UVA12345 Dynamic len(set(a[L:R]))
  20. 【SPL标准库专题(6)】 Datastructures:SplPriorityQueue

热门文章

  1. January 08th, 2018 Week 02nd Monday
  2. MySQL视图 索引 存储过程 触发器 函数
  3. activiti5.14版本在线流程设计器的国际化中文支持
  4. Django之ORM查询复习与cookie
  5. gitlab 数据同步
  6. 转 一个web项目web.xml的配置中<context-param>配置作用
  7. openzeppelin-solidity/contracts的代码学习——payment
  8. python3打包成exe---pyinstaller方法
  9. centos7搭建filebeat
  10. 201904:Action recognition based on 2D skeletons extracted from RGB videos