首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编译、链接到载入、运行的大致过程----3.载入

Linux下,elf文件有三类,分别是: relocatable , shared object, executable....ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux...;因此“executable” 的elf文件是"stripped"的; 程序的载入过程: 当我们运行一个程序的时候,操作系统打开程序文件做完相应的处理后,会把控制权交给 程序解释器(比如:/lib/ld-linux.so...无论是程序本身,还是其依赖的动态链接库,被载入的都是 type=LOAD的segment;其他segment不会在程序的正常加载过程中被载入内存; 2....载入内存后,在运行时候,访问的地址是: 内存虚拟地址。这个内存虚拟地址 并不是 “程序虚拟地址”,也不是“内存物理地址”;但是 这三者之间是有关系的: A.

2.3K30

linux命令讲解大全】208.modprobe:自动处理可载入模块的智能工具

modprobe 自动处理可载入模块 补充说明 modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。 modprobe可载入指定的个别模块,或是载入一组相依的模块。...modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。...语法 modprobe (选项) (参数) 选项 -a 或 --all:载入全部的模块; -c 或 --show-conf:显示所有模块的设置信息; -d 或 --debug:使用排错模式; -l 或...--list:显示可用的模块; -r 或 --remove:模块闲置不用时,即自动卸载模块; -t 或 --type:指定模块类型; -v 或 --verbose:执行时显示详细的信息; -V 或 --...移除已经加载的模块: modprobe -r 模块名 这里,移除已加载的模块,和rmmod功能相同。

48510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    编译、链接到载入、运行的大致过程----4.运行

    物理部件管理“内存虚拟地址”到“物理内存地址”的映射; 程序运行到某个代码段或者访问数据的时候,如果在内存中找不到数据,那么就会产生一种叫做page fault的异常,然后进入异常处理程序,而这个异常处理的过程所作的事情是...处理完异常之后,程序会回到原来的断点继续运行; 如果程序在运行的过程中发生了内存访问错误,通常会触发core dump, 如果系统开启了core dump, 那么会导出当时的系统内存映像到一个core...的文件里面,然后可以用gdb 工具对这个core dump 文件进行调式,从而尽可能获得当时的内存状况,分析发生crash的原因,core dump 中使用的地址依然是”内存虚拟地址“, 所以 在程序运行的过程

    61310

    Linux内核(内核模块)的加载过程(超详细)

    这时内核终于开始替代 BIOS 接管 Linux 的启动过程了。...内核完成再次系统自检之后,开始采用动态的方式加载每个硬件的模块,这个动态模块大家可以想象成硬件的驱动(默认 Linux 硬件的驱动是不需要手工安装的,如果是重要的功能,则会直接编译到内核当中;如果是非重要的功能...在多数 Linux 中,都会把硬件的驱动程序编译为模块, 这些模块保存在 /lib/modules 目录中。...但是,如果 Linux 安装在 SCSI 硬盘之上,或者采用的是 LVM 文件系统,那么内核(内核载入内存是启动引导程序 GRUB 调用的,并不存在硬盘驱动不识别的问题)在加载根目录之前是需要加载 SCSI...它们的作用类似,可以通过启动引导程序加载到内存中,然后会解压缩并在内存中仿真成一个根目录,并且这个仿真的文件系统能够提供一个可执行程序,通过该程序来加载启动过程中所需的内核模块,比如 USB、SATA.

    49320

    编译、链接到载入、运行的大致过程 ----1. 编译

    对于需要编译的编程语言(c, c++, java, c# ...高级语言),源码写完后,是无法直接运行的;需要有 编译,链接的过程才能生成最终可以执行的二进制文件; 编译: 编译的过程通常包含: A....预编译过程,就是在源代码中进行文本替换工作,比如c中的#include的替换,以及宏定义的替换等;最终输出的依然是 普通的文本文件;在Linux中使用gcc可以用如下命令获得预编译的结果: [root@...编译过程, 这个过程是把预编译的结果进行转换,从而获得对应的汇编语言; [root@www ~]# gcc -S hello.i -o hello.s #手动把预编译的结果 编译为汇编语言...汇编过程,该过程把上述的汇编代码(hello.s) 转变成机器码;这一过程可以用如下的步骤来完成: [root@www ~]# as hello.s -o hello.obj #as 命令是用来将汇编语言转变成机器码的...(预编译--->编译--->汇编),而在实际使用的时候,并不是这样一步步进行操作的(也不需要这样一步步进行操作),linux 下用 gcc -c hello.c -o hello.obj 这样的方式一步到位来完成编译

    49310

    linux 内核模块开发相关的文章搜集和模块开发过程中的小技巧

    最近需要开发一些内核模块,进行探究linux内核的一些特征,现在把一些遇到的比较好的文章和知识点,进行简要记录和备忘; 内核模块开发相关链接: https://www.thegeekstuff.com/...内核模块参考书籍;PDF https://developer.ibm.com/technologies/linux/articles/l-kernel-memory-access/ Linux内存模型讲解和...Linux访问userspace内存API讲解; 内核模块开发过程遇到的知识点: make命令,会隐士调用cc -c 命令,生成.o文件;所以在内核模块的makefile中,可以直接写上:  obj-m...内核模块只能访问内核导出的函数和变量;EXPORT_SYMBOL(my_variable);  想要熟悉内核模块编程,写一个linux设备驱动程序是比较好的学习方法;  在进行开发linux内核模块的时候...最简单的内核模块编译示例: //必要的头文件 #include // included for all kernel modules #include <linux/kernel.h

    80520

    linux小白学习入门过程

    这是看到有很多人都是在用虚拟机做网站之后找到的部分linux小白入门,希望大家能多多了解一下linux的相关技术,对于优化服务器有着很好的帮助。 说到linux,本人也只是小白级别的。...但是本人并不认为小白就不能写点学习过程。 每个人吧,都有各自的学习方式。有些人想学啥新东西的时候喜欢买几本书,然后啃啃啃。...1、网上搜索,先百度一下linux常用命令。 2、寻找视频教程,看一下老师是如何学习如何使用linux的。这个过程中就会安装各种软件了。这个过程也是非常非常重要的。...接下来我们要买几本书,系统的学习linux。这就把更深层次的原理搞清楚了,在看书的过程中,就把上面三个过程中遇到的各种“莫名其妙”的问题都搞清楚原理了。...下面我也贴一下这个学习过程中用到的东西吧: 1、linux常用命令: 文件和目录 cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../..

    81110

    Nginx安装过程Linux

    Nginx安装过程Linux) 1、 在安装nginx之前,要安装其他的一些相关软件,包括gcc、openssl、pcre和zlib,这里分别来解释一下这些都是什么东西: 1.1 GCC...是一个用于linux系统下编程的编译器,是一个用于编程开发的自由编译器。...1.3 在Nginx编译需要 PCRE(Perl Compatible Regular Expression),因为Nginx 的Rewrite 模块和HTTP 核心模块会使用到PCRE正则表达式语法...上用命令下载) 3、 解压 tar -zxvf nginx-1.5.9.tar.gz 4、 make 编译 (make的过程是把各种语言写的源码文件,变成可执行文件和各种库文件) make install...(/root/prog/nginx/sbin/nginx -t 查看配置信息是否正确) 5.2 停止操作 停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的 步骤1:查询

    1.3K40

    Linux 程序编译过程详解

    linux中静态库是以.a为后缀的文件,共享库是以.so为后缀的文件。静态库和动态库的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。...共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。在Linux系统中,可以用ldd命令查看一个可执行程序依赖的共享库。...准备工作由于GCC工具链主要是在Linux环境中进行使用,因此本文也将以Linux系统作为工作环境。...\n"); return ;}编译过程1.预处理预处理的过程主要包括以下过程:将所有的#define删除,并且展开所有的宏定义,并且处理所有的条件预编译指令,比如#if #ifdef #elif #else...在Linux系统中,可以用ldd命令查看一个可执行程序依赖的共享库。

    1.9K30

    Linux系统调用过程

    2 系统调用过程 http://www.linuxidc.com/Linux/2015-04/116546.htm 系统调用是操作系统提供给用户(应用程序)的一组接口,每个系统调用都有一个对应的系统调用函数来完成相应的工作...  CALL(sys_rt_tgsigqueueinfo)   CALL(sys_perf_event_open)   CALL(sys_pk)    #我自己加的系统调用  了解了一个系统调用的执行过程就可以试着添加一个自己的系统调用了...声明自己的系统调用函数 在include/linux/syscall.h添加asmlinkage long sys_pk() 用户空间:       void pk()   {     __asm__...3 添加自己的系统调用 了解了一个系统调用的执行过程就可以试着添加一个自己的系统调用了: 内核: 1....声明自己的系统调用函数 在include/linux/syscall.h添加asmlinkage long sys_pk() 用户空间:       void pk() { __asm__( "

    4.8K70
    领券