linux 011 注释12: dup 函数,新设计艺术团队第二版,第四章 4-23 至 4-38

(114) 4-23 函tell_father,namei ,进程结束时候是要给父进程发信号的。以及打开文件:

在这里插入图片描述

(115) 4-24 _exit及do_exit调用链:

在这里插入图片描述

(116)4-25 函execve,sys_execve,do_execve 及其调用链。通过 fork + execve 让新进程执行新函数,新代码,新功能:

在这里插入图片描述

(117) 4-26 函count,结构exec,汇编指令stosb及lodsb ,这些将会被 execve 在创建新函数时被调用:

在这里插入图片描述

(118) 4-27 函strchr,get_ds,get_fs,set_fs,结构sigaction:

在这里插入图片描述

(119) 4-28 函copy_strings ,名字是字符串的复制,但功能要复杂些,比如要记录写入内存的位置:

在这里插入图片描述

(120) 4-29 函set_limit ,修改段描述符中的段界限字段:

在这里插入图片描述

(121) 4-30 函put_page及tcb.brk 成员的名称起源。 put_page 主要是把本进程已申请已掌握的内存页注册到线性地址空间里,即页目录表和页表里:

在这里插入图片描述

(122) 4-31 函change_ldt ,修正本进程的 LDT 表,很显然,只有内核态,不需要使用 LDT 表进行寻址时候,才可以进行此操作:

在这里插入图片描述

(123) 4-32 函create_tables ,创建表,继续在未来的要执行的代码的栈的顶端完善参数数组和环境字符串数组。所以说,看反汇编的时候,感觉函数的参数和局部变量是在栈里,也是有道理的。栈指针以上是初始化的数据,栈以下留给栈使用 :

在这里插入图片描述

(124) 4-33 函do_execve 上 ,分析最重要的函数,完成执行新代码的准备工作,修改 tcb 块,删除源代码的占据的内存,因本函数太大,一版面放不下,把对脚本文件的执行放到下一页:

在这里插入图片描述

(125) 4-34 函do_execve 下脚本解析 。可见,执行脚本文件,其实是运行跟脚本匹配的解释器程序,比如各版本的 shell :

在这里插入图片描述

(126) 4-35 函free_page_tables,free_page 。释放原代码占据的内存页面,这些页面包含了原代码的代码与数据,execve 用不上这些了:

在这里插入图片描述

(127) 4-36 函do_execve调用链:

在这里插入图片描述

(128) 4-37 函strncpy,namei :

在这里插入图片描述

(129) 4-38 函 change_lgt 的合理性 ,为何修改和删除当前正在运行进程的 LDT 表和页目录项 而不会引起程序崩溃:

在这里插入图片描述

(130)

谢谢

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值