学习笔记

1.ELF目标文件格式
编译器生成目标文件,目标文件与目标平台二进制兼容。
ELF:可执行或可链接的格式,是目标文件格式标准。
ELF类型:
可重定位文件:编译器汇编器创建的 .o 文件,最后所有的 .o文件链接为同一个linux内核。
可执行文件:多个可重定位文件结合成可执行文件,除了运行时解析的共享库,其他重定位工作全部完成。
共享目标文件:共享库,被其他可执行文件调用。
如何看待ELF文件:
可执行文件:程序头表描述的段的集合,段包含节。
可重定位文件:节头表描述的节的集合
ELF结构:
ELF header:在文件的开始,保存了路线图,描述了该文件的组织情况。
Program header table:告诉系统如何创建进程映像。用来构造进程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。
Section header table:包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。用于链接的目标文件必须包含节区头部表,其他目标文件可以有,也可以没有这个表。
programheader:和创建进程相关,描述连续几个节在文件中的位置、大小以及它被放进内存后的位置大小,告诉系统如何创建进程映像,可重定位文件不需要这个表。

汇编
节区
.text
存放程序源代码编译后的机器指令
.data
存放全局变量和局部静态变量
.bss
为未初始化的全局变量和局部静态变量预留位置,目标文件中,未初始化变量不需要占据任何实际的磁盘空间
.rel.text
存放调用外部函数或者引用全局变量等相关的重定位信息
.rel.data
一个全局变量被初始化为其他文件中的全局变量地址或者外部定义函数的地址。
.symtab
存放函数和全局变量的信息,重定位时根据.rel.text和.rel.data来修正相关地址
.debug
-g选项之后才有, 调试符号表
.line
-g选项之后才有,记录源代码行号和.text中机器指令的映射关系
.strtab
以null结尾的字符串序列
ELF头(elf header)------readelf -h filename
包含系统相关、类型相关、加载相关、链接相关的信息
节头部表(section header table)------readelf -S filename
描述程序节,为汇编器和链接器服务。它把elf文件分成了许多

问题

1、 模块机制怎样弥补可扩展性和可维护性相对较差这一缺陷?
很多驱动程序都以模块的形式存在,用户可以有选择的加载需要的驱动程序。
2、gcc -x是什么?
gcc -x: -x只激活预处理,编译,和汇编,,只把程式做成obj文档;
gcc -c:文件.o是二进制汇编文件打开是乱码
3、#include <linux/init.h>//包含_init、_exit,kernel.h包含常用的内核函数
4、#include <linux/module.h>//驱动程序的头文件
MODULE_LICENSE("Dual BSD/GPL");
static char *name="ycx";
static int __init name_init(void)
{
printk("==Hello World==\n");
printk("==Hello %s==\n",name);
return 0;
}
static void __exit name_exit(void)
{
printk(KERN_INFO"Name module exit\n");
}
module_init(name_init);
module_exit(name_exit);
module_param(name,charp,S_IRUGO);

2018-2019-1 20189208《Linux内核原理与分析》第八周作业的更多相关文章

  1. 2019-2020-1 20199329《Linux内核原理与分析》第九周作业

    <Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...

  2. 2019-2020-1 20199329《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...

  3. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  4. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  5. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  6. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业

    20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...

  7. 2019-2020-1 20209313《Linux内核原理与分析》第二周作业

    2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

  10. 2018-2019-1 20189221《Linux内核原理与分析》第二周作业

    读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...

随机推荐

  1. VirtualBox修改UUID实现虚拟硬盘的重复利用

    其实,记录这个是为了留给自己看.每次用每次查,已经老到什么东西都记不住了.本次查询是从这里(VirtualBox 修改UUID实现虚拟硬盘复制)获得帮助的,感谢. 在VirtualBox把一个已经使用 ...

  2. odoo10.0在odoo12.0环境的基础上搭建环境

    在前边的文章中,讲述了如何搭建12.0的环境,现由业务的需要需要在此基础上搭建基于python2.7的10.0版本. 第一步,安装python2.7 sudo apt- 第二步,安装python-de ...

  3. [Oracle运维工程师手记] 如何从trace 文件,判断是否执行了并行

    [Oracle运维工程师手记系列]如何从trace 文件,判断是否执行了并行 客户说,明明指定了并行的hint,OEM 却报说没有并行,并且提供了画面. 客户的SQL文长这样: INSERT/*+ p ...

  4. [第二届构建之法论坛] 预培训文档(C++版)

    本博客是第二届构建之法论坛暨软件工程培训活动预培训文档中[适用于结对编程部分的C++版本],需要实验者有一部分C++基础. 目录 Part0.背景 Part1.配置环境 Part2.克隆项目 Part ...

  5. java对象池commons-pool-1.6详解(一)

    自己的项目中用到了 对象池 commons-pool: package com.sankuai.qcs.regulation.protocol.client; import com.dianping. ...

  6. aop通知加参数的匹配规则

  7. Bugku 杂项 眼见非实

    把文件放进Kali中可以看到这是一个zip文件,解压后得到一个docx,继续翻 (在windows中是打不开的 在word/document.xml中可以找到flag

  8. 解决Docker中运行的MySQL中文乱码

    docker exec -it mysql bash 如果没有安装vim,请参考 解决Docker容器中不能用vim编辑文件 vim /etc/mysql/mysql.conf.d/mysql.cnf ...

  9. 使用css实现无滚动条滚动+使用插件自定义滚动条样式

    使用css实现无滚动条滚动,摘抄自:曹小萌博客 使用css实现无滚动条滚动,大体思路是在div外面再套一个div.这个div设置overflow:hidden.而内容div设置 overflow-x: ...

  10. 多进程multiprocessing

    PACKAGE CONTENTS connection dummy (package) forking heap managers pool process queues reduction shar ...