精华内容
下载资源
问答
  • 作者:贺东升校队:梁金荣、张孝家Linux执行文件进程的虚拟地址空间一个可执行文件被执行的同时也伴随着一个新的进程的创建。Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立...

    546bba38f5da626e5c4cf08d025ad2d5.png63d5bea05c94a650ba2a2fe05fa1269f.png

    作者:贺东升

    校队:梁金荣、张孝家

    Linux可执行文件与进程的虚拟地址空间

    一个可执行文件被执行的同时也伴随着一个新的进程的创建。Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令指针寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行。

    一个可执行文件包含可被CPU执行的指令和待处理的数据,上CPU之前,指令和数据全部被翻译成成二进制的形式。在可执行的文件的内部,划分出了一些专门的段,如代码段,数据段,BSS段等。代码段中存放的是可执行的二进制指令,数据段存放初始化过的变量,BSS段存放未初始化的变量,从装载的角度,把这些段称为segment。

    32位的虚拟地址空间

    0c6e713190f9c6849309d517b167acea.png

    64位的虚拟地址空间

    72574125adb385af0980ebe9089afcab.png

    Proc目录下的进程虚拟地址空间布局

    Linux在装载可执行文件的时候,会将这些segment映射到进程的地址空间中。映射的时候,这里面的segment会对应一个VMA。Linux将进程虚拟地址空间中的一个段叫做虚拟内存区域(VMA)。在/proc目录下,可以查看一个进程的虚拟地址空间,通过命令

    cat /proc/pid/maps

    f577727ad29f6f405a67ea87a32952cb.png

    这里面的每一行都对应一个VMA,每一个VMA都通过vm_area_struct结构体来描述。结构体中的vm_startvm_end是VMA的起始地址和结束地址,还有其他的一些域来描述VMA的权限等。我们需要关注的是前三个VMA,这是ELF可执行文件的segment映射过来的。可以看到,这里面并没有标明哪个是TEXT段,哪个是DATA段和BSS段。但是可以发现,前三个VMA的权限都不一样。

    虚拟地址空间存储区的分布

    d5948adabda50ad6282886d3280b3fd6.png

    所以,操作系统实际上并不关心可执行文件各个段所包含的的实际内容,OS只关心一些跟装载相关的问题,最主要的是段的权限(可读,可写,可执行)。

    ELF文件中,段的权限往往只有为数不多的几种组合,基本上就3种:

    1. 以代码段为代表的权限为可读可执行的段

    2. 以数据段和BSS段为代表的权限为可读可写的段

    3. 以只读数据段为代表的权限为只读的段

    ELF可执行文件中有两个概念,分别是段(segment)和节(section)。通过readelf -S name.elf可以查看ELF可执行文件的节头表,这里面有所有节的信息

    424740a61fd08e90a38d4caf84cbd3d2.png

    在将目标文件链接成可执行文件的时候,链接器会尽量把相同权限属性的段分配在同一空间。比如可读可执行的段都放在一起,这种段的典型是代码段;可读可写的段都放在一起,这种段的典型是数据段。在ELF中,把这些属性相似的,又连在一起的段叫做一个“segment”,而系统正是按照“segment”而不是“section”来映射可执行文件的。

    可以使用命令 readelf -l name.elf来查看ELF的段。在ELF的程序头表,保存着segment的信息

    8c6c2280cdbcb5e17c9effcd3367041a.png

    最下面是是段与节的归属关系:

    687006af85079590534a477457c0379b.png

    可以看到这个可执行文件中共有9个segment。从装载的角度看,我们只关心两个“LOAD”型的segment,因为只有它是需要被映射的,其他诸如“NOTE”,"GNU_STACK"都是在装载时起辅助作用的。下面的0到8分别对应着上面的一个segment,两个LOAD类型的segment分别对应着02和03,可以看到每个LOAD类型的segment里面都包含了许多的section。

    ELF将相同或者相似属性的section合并为一个segment并映射到一个VMA中,是为了减少页面内部碎片,以节省内存空间的使用。因为在有了虚拟存储机制以后,装载的时候采用页映射的方式。Intel系列的处理器,页尺寸最小是4096个字节,也就是4KB。当写的程序很小的时候,每个section可能只有几十或者几百个字节,如果每个section都占用一个页的话,对内存的浪费是海量的。所以在将目标文件链接成可执行文件的时候,链接器会尽量把相同或相似权限属性的section分配在同一空间,在程序头表中,将一个或多个属性类似的section合并为一个segment,然后在装载的时候,将这个segment映射到进程虚拟地址空间中的一个VMA中。

    ELF可执行文件与进程虚拟地址空间的映射关系

    2b280562a823d006eebc4758a691177a.png

    很明显,属性相同或相似的section会被归类到一个segment,并且被映射到同一个VMA。

    4b45afdb68c8d9a2f85c9439a36a859d.png

    总的来说,“segment”和“section”是从不同的角度来划分同一个ELF文件。这个在ELF文件中被称为不同的视图(view),从section的角度来看ELF文件就是链接视图(Linking View),从segment的角度来看就是执行视图(Execution View)。当我们在谈到ELF装载时,段专门指segment,而在其他的情况下,段指的是section。

    在实际的映射过程中,只发现有代码段映射的VMA,有数据段映射的VMA,却没有BSS段映射的VMA。

    8bdb1f65502531ae4a75dc83181e1f91.png

    如果仔细观察程序头表,查看两个LOAD型的segment,会发现一些映射的细节。

    a6a29f1fda238d6da50d494d565a9320.png

    FileSiz表示segment在ELF文件中所占的大小,MemSiz表示segment在进程虚拟地址空间中所占的大小。可以发现,MemSiz比FileSiz多出了0x20个字节,十六进制的20对应的十进制是32。再来看一下这个ELF可执行文件中BSS段的大小。

    6b43a39dac8c8a0b9ccb7b294f389113.png

    可以看到,BSS段的大小正好是十进制的32,。这说明在实际映射的时候,数据段在内存中所分配的空间大小超过实际的大小,超出去的这部分空间就是BSS段,并没有为BSS段进行专门的映射,这就是为什么在查看程序头表时,只看到了两个LOAD类型的段,而不是三个,BSS段已经被合并到了数据类型的段里面。

    这样做的好处就是在构造ELF可执行文件时,不需要再额外设立BSS的segment了,只需把数据segment的内存扩大,那些额外的部分就是BSS。而这部分多出的BSS空间,会被全部填充为0 。在C语言中,没有初始化的全局变量和一些静态变量会被默认初始化为0 ,这就是原因,因为它们会被分配到BSS段上,被一次性初始化为0。

    最后我们通过一个打印变量地址的小程序进行验证,仔细观察没有初始化的全局变量和一些静态变量的线性地址。

    f5eb84ab9342e30edc34f0ee5b403331.png

    视频讲解

    这部分内容录了一个视频,因为这是我第一次录讲解视频,没有什么经验,如果视频内容有任何问题还希望各路大神指出,不胜感激。

    • 腾讯视频:

    • B站:点击阅读原文观看视频

    https://www.bilibili.com/video/BV1Ua4y1x7sU?p=1

    --END--

    本公众号全部博文已整理成一个目录,请在公众号里回复「m」获取!

    推荐阅读:

    神器面世:让你快速在 iOS 设备上安装 Windows、Linux 等操作系统!

    当互联网码农遇见国企老同学

    我的电脑不联网,很安全,黑客:你还有风扇呢

    5T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,单片机,树莓派,等等。在公众号内回复「1024」,即可免费获取!!

    141600d56c126245917e2f43009c85cd.png

    展开全文
  • Linux执行文件结构与进程结构一、Linux执行文件结构在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况:可以看出,此可执行文件在存储时(没有调入到内容)分为代码区(text)、...

    Linux 可执行文件结构与进程结构

    一、Linux可执行文件结构

    在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况:

    2f3f36251f24de78dff2379f622306aa.png

    可以看出,此可执行文件在存储时(没有调入到内容)分为代码区(text)、数据区(data)和未初始化数据区(bss)3 个部分。各段基本内容说明如下:

    代码区:

    存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。

    代码区的指令包括操作码和操作对象(或对象地址引用)。如果是立即数(即是具体的数值),将直接包含在代码中,如果是局部数据,将在运行时在栈区分配空间,然后再引用该数据的地址,如果是未初始化数据区和数据区,在代码中同样将引用该数据的地址。

    全局初始化数据区/静态数据区(数据段):

    该区包含了在程序中明确被初始化的全局变量、已经初始化的静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。

    例如,一个不在任何函数内声明(全局变量),如下:

    int count = 100;

    使得变量 count 根据其初始值被存储初始化数据区中。

    在任意位置定义静态变量方式如下:

    static int num = 200;

    这声明了一个静态数据并初始化,如果在任意函数体外声明,则表示其为一个静态全局变量,如果在函数体内(局部),则表示其为一个局部静态变量。另外,如果在一个函数名前加上 static,则表示此函数只能再当前文件中被调用。

    未初始化数据区(又叫 BSS 区):

    存入的是全局未初始化变量和未初始化静态变量。未初始化数据区的数据在程序开始执行之前被内核初始化为 0 或者空(NULL)。

    例如,一个不在任何函数内声明的未初始化变量。

    long sum[1000];

    将 sum 存储到未初始化数据

    二、Linux进程结构

    在 Linux 系统下,如果将某个可执行文件加载到内存运行,则将演变成一个或多个进程(多个进程的原因是进程在运行时可以再创建新的进程,但加载时只有一个进程)。进程是 Linux 事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源。进程的环境由当前系统状态及其父进程信息决定和组成的。

    下图为可执行文件存储结构和 Linux 进程基本结构(部分)的对照图。

    228c6296a1bf3afa02fe46c1a9aba29c.png

    一个进程是一个运行着的程序段,一个进程主要包括在内存中申请的空间,代码(加载的程序,包括代码段,数据段,BSS),堆,栈,以及内核提供的内核进程信息结构体

    task_struct (位置在 /usr/include/linux/sched.h)、打开的文件、上下文(指进程执行活动全过程的静态描述)信息以及挂起的信号等。

    (1)代码区(text segment)。加载的是可执行文件代码段,其加载到内存中的位置由加载器完成。

    (2)全局初始化数据区/静态数据区(Data Segment)。加载的是可执行文件数据段,存储于数据段(全局初始化,静态初始化数据)的数据的生存周期为整个程序运行过程。

    (3)未初始化数据区(BSS)。加载的是可执行文件BSS段,位置可以分开亦可以紧靠数据段,存储于数据段的数据(全局未初始化,静态未初始化数据)的生存周期为整个程序运行过程。

    (4)栈区(stack)。由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。

    (5)堆区(heap)。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时有可能由OS回收。

    系统之所以分成这么多个区域,主要基于以下考虑:

    代码段和数据段分开,运行时便于分开加载,在哈佛体系结构的处理器将取得更好得流水线效率。

    代码时依次执行的,是由处理器 PC 指针依次读入,而且代码可以被多个程序共享,数据在整个运行过程中有可能多次被调用,如果将代码和数据混合在一起将造成空间的浪费。

    临时数据以及需要再次使用的代码在运行时放入栈中,生命周期短,便于提高资源利用率。

    堆区可以由程序员分配和释放,以便用户自由分配,提高程序的灵活性。

    C 各存储类型比较

    82067625d76d0965ad995c1a7d57b91d.png
    展开全文
  • 获取当前进程执行文件路径 获取指定id进程执行文件路径 获取当前进程执行文件路径 #include <stdio.h> #include <unistd.h> #include <linux/limits.h> int main() { char dir...

    目录

    获取当前进程 可执行文件路径

    获取指定id进程 可执行文件路径


    获取当前进程 可执行文件路径

    #include <stdio.h>
    #include <unistd.h>
    #include <linux/limits.h>
     
    int main() {
    	char dir[PATH_MAX] = {0};
    	int n = readlink("/proc/self/exe", dir, PATH_MAX);
    	printf("PATH_MAX: %d\n", PATH_MAX);
    	printf("readlink return: %d\n", n);
    	printf("dir: %s\n", dir);
     
    	return 0;
    }

    上面文件生成的可执行文件是 /home/yasi/tmp/t,执行结果如下:

    PATH_MAX: 4096
    readlink return: 16
    dir: /home/yasi/tmp/t

    获取指定id进程 可执行文件路径

    查看 指定进程10010的 可执行文件路径

    #include <stdio.h>
    #include <unistd.h>
    #include <linux/limits.h>
     
    int main() {
    	char dir[PATH_MAX] = {0}, path[20]={0};
        int pid=10010, n;
    
        sprintf(path, "proc/%d/exe", pid);
        n = readlink(path, dir, PATH_MAX);
        printf("readlink return: %d\n", n);
        printf("dir: %s\n", dir);
    
        return 0;
    }

     

     

    展开全文
  • Linux执行文件进程的虚拟地址空间 一个可执行文件被执行的同时也伴随着一个新的进程的创建。Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射...

    Linux可执行文件与进程的虚拟地址空间

    一个可执行文件被执行的同时也伴随着一个新的进程的创建。Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令指针寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行。

    一个可执行文件包含可被CPU执行的指令和待处理的数据,上CPU之前,指令和数据全部被翻译成成二进制的形式。在可执行的文件的内部,划分出了一些专门的段,如代码段,数据段,BSS段等。代码段中存放的是可执行的二进制指令,数据段存放初始化过的变量,BSS段存放未初始化的变量,从装载的角度,把这些段称为segment。

    32位的虚拟地址空间

    在这里插入图片描述

    64位的虚拟地址空间

    在这里插入图片描述

    Proc目录下的进程虚拟地址空间布局

    Linux在装载可执行文件的时候,会将这些segment映射到进程的地址空间中。映射的时候,这里面的segment会对应一个VMA。Linux将进程虚拟地址空间中的一个段叫做虚拟内存区域(VMA)。在/proc目录下,可以查看一个进程的虚拟地址空间,通过命令 cat /proc/pid/maps
    在这里插入图片描述
    这里面的每一行都对应一个VMA,每一个VMA都通过vm_area_struct结构体来描述。结构体中的vm_start和vm_end是VMA的起始地址和结束地址,还有其他的一些域来描述VMA的权限等。我们需要关注的是前三个VMA,这是ELF可执行文件的segment映射过来的。可以看到,这里面并没有标明哪个是TEXT段,哪个是DATA段和BSS段。但是可以看到,每一个VMA都有不同的权限。

    虚拟地址空间存储区的分布

    在这里插入图片描述
    所以,操作系统实际上并不关心可执行文件各个段所包含的的实际内容,OS只关心一些跟装载相关的问题,最主要的是段的权限(可读,可写,可执行)。

    ELF文件中,段的权限往往只有为数不多的几种组合,基本上就3种:

    1. 以代码段为代表的权限为可读可执行的段
    2. 以数据段和BSS段为代表的权限为可读可写的段
    3. 以只读数据段为代表的权限为只读的段

    ELF可执行文件中有两个概念,分别是段(segment)和节(section)。通过readelf -S name.elf可以查看ELF可执行文件的节头表,这里面有所有节的信息
    在这里插入图片描述
    在将目标文件链接成可执行文件的时候,链接器会尽量把相同权限属性的段分配在同一空间。比如可读可执行的段都放在一起,这种段的典型是代码段;可读可写的段都放在一起,这种段的典型是数据段。在ELF中,把这些属性相似的,又连在一起的段叫做一个“segment”,而系统正是按照“segment”而不是“section”来映射可执行文件的。

    可以使用命令 readelf -l name.elf来查看ELF的段。在ELF的程序头表,保存着segment的信息
    在这里插入图片描述
    最下面是是段与节的归属关系:
    在这里插入图片描述
    可以看到这个可执行文件中共有9个segment。从装载的角度看,我们只关心两个“LOAD”型的segment,因为只有它是需要被映射的,其他诸如“NOTE”,"GNU_STACK"都是在装载时起辅助作用的。下面的0到8分别对应着上面的一个segment,两个LOAD类型的segment分别对应着02和03,可以看到每个LOAD类型的segment里面都包含了许多的section。

    ELF将相同或者相似属性的section合并为一个segment并映射到一个VMA中,是为了减少页面内部碎片,以节省内存空间的使用。因为在有了虚拟存储机制以后,装载的时候采用页映射的方式。Intel系列的处理器,页尺寸最小是4096个字节,也就是4KB。当写的程序很小的时候,每个section可能只有几十或者几百个字节,如果每个section都占用一个页的话,对内存的浪费是海量的。所以在将目标文件链接成可执行文件的时候,链接器会尽量把相同或相似权限属性的section分配在同一空间,在程序头表中,将一个或多个属性类似的section合并为一个segment,然后在装载的时候,将这个segment映射到进程虚拟地址空间中的一个VMA中。

    ELF可执行文件与进程虚拟地址空间的映射关系

    在这里插入图片描述
    很明显,属性相同或相似的section会被归类到一个segment,并且被映射到同一个VMA。

    在这里插入图片描述
    总的来说,“segment”和“section”是从不同的角度来划分同一个ELF文件。这个在ELF文件中被称为不同的视图(view),从section的角度来看ELF文件就是链接视图(Linking View),从segment的角度来看就是执行视图(Execution View)。当我们在谈到ELF装载时,段专门指segment,而在其他的情况下,段指的是section。

    在实际的映射过程中,只发现有代码段映射的VMA,有数据段映射的VMA,却没有BSS段映射的VMA。
    在这里插入图片描述

    如果仔细观察程序头表,查看两个LOAD型的segment,会发现一些映射的细节。
    在这里插入图片描述
    FileSiz表示segment在ELF文件中所占的大小,MemSiz表示segment在进程虚拟地址空间中所占的大小。可以发现,MemSiz比FileSiz多出了0x20个字节,十六进制的20对应的十进制是32。再来看一下这个ELF可执行文件中BSS段的大小。
    在这里插入图片描述
    可以看到,BSS段的大小正好是十进制的32,。这说明在实际映射的时候,数据段在内存中所分配的空间大小超过实际的大小,超出去的这部分空间就是BSS段,并没有为BSS段进行专门的映射,这就是为什么在查看程序头表时,只看到了两个LOAD类型的段,而不是三个,BSS段已经被合并到了数据类型的段里面。

    这样做的好处就是在构造ELF可执行文件时,不需要再额外设立BSS的segment了,只需把数据segment的内存扩大,那些额外的部分就是BSS。而这部分多出的BSS空间,会被全部填充为0 。在C语言中,没有初始化的全局变量和一些静态变量会被默认初始化为0 ,这就是原因,因为它们会被分配到BSS段上,被一次性初始化为0。

    最后我们通过一个打印变量地址的小程序进行验证,仔细观察没有初始化的全局变量和一些静态变量的线性地址。

    在这里插入图片描述

    视频讲解

    这部分内容录了一个视频,因为这是我第一次录讲解视频,没有什么经验,如果视频内容有任何问题还请指出,不胜感激。

    视频地址:
    B站:打印进程的虚拟地址空间
    腾讯视频:Linux的可执行文件与虚拟地址空间

    展开全文
  • Linux提供了几个系统调用来创建和终止进程,以及执行新程序,他们分别是Fork,vfork,clone和exec,exit;其中clone用来创建轻量级进程,必须制定要共享的资源,exec系统调用执行一个新程序,exit系统调用终止进程。...
  • 本文主要针对进程创建、可执行文件的加载和进程间切换三大部分进行实验并分析。 实验环境:Ubuntu 16虚拟机、VMware 14 1 进程创建 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行...
  • Linux执行文件结构与进程结构

    千次阅读 多人点赞 2015-04-19 10:15:38
    Linux执行文件结构 在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况: 可以看出,此可执行文件在存储时(没有调入到内容)分为代码区(text)、数据区(data)和未初始化数据...
  • Linux执行文件结构 在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况: 可以看出,此可执行文件在存储时(没有调入到内存前)分为代码区(text)、数据区(data)和未...
  • 328 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验要求 1.阅读理解task_struct数据结构;...3.理解编译链接的过程和ELF可执行文件格式; 4.使用gdb跟踪分析一个execve系统调用内核...
  • 进程中加载执行纯2进制可执行文件bin mmap把2进制文件映射到进程用户内存空间, 将程序控制权交给bin linux下用汇编通过中断调用api打印一个hello world (nasm版本), [section .data] output: db "Hello
  • Linux执行文件结构与进程结构 一、Linux执行文件结构 在 Linux 下,程序是一个普通的可执行文件,以下列出一个二...
  • Linux执行文件结构 在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况: 可以看出,此可执行文件在存储时(没有调入到内存前)分为代码区(text)、数据区...
  • Linux下查看进程执行文件绝对路径

    千次阅读 2015-10-09 11:39:26
    Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作...
  • 在当前进程里,在文件外部执行文件内部命令(source或 点.) source 文件名 . 文件名 在另一个进程里,在文件外部执行文件内部命令(新建一个bash和在文件内添加特定命令) 先bash 后bash 文件名 或 在文件开头添加 #...
  • 通过 ps -ax|grep "执行文件名",获得进程ID 使用:cd /proc/进程ID 使用:ll -rt|grep cwd,即可获得执行文件的所处路径
  • 2. 父进程在创建子进程之后,希望子进程在其进程空间当中加载另外一个可执行文件,从而达到一个创建一个全新进程的目的. 第二点其实是大多数情况 1. 进程调用exec系列函数在进程中加载执行另外一个可执行文件 2...
  • 为理解进程权限和文件权限,我要复制一个执行文件于/tmp,并通过管理员root 和普通用户redhat区分,具体如下: #先查看tmp目录权限(普通用户有读写执行权限) #复制touch命令于 tmp目录下 #从下图看,newfile...
  • Linux执行文件结构 在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况: 可以看出,此可执行文件在存储时(没有调入到内存前)分为代码区(text)、数据区(data)和未初始化...
  • 需要了解一个程序编译生成一个可执行文件Linux下的一种格式标准,Linux中的ELF格式文件一共有四种: ●可重定位文件(Relocatable File):这类文件包含了代码和数据,可被用来链接成可执行文件或者共享目录文件,...
  • 代码通过编译器编译为可执行文件linux执行文件的格式为elf。 linux下物理内存通过mmu管理映射到进程的虚拟内存中,虚拟内存的分布 1.代码段:只读内存区,当尝试写,系统产生段错误。linux下把elf...
  • 引言最近自己的服务器被一个名为xmrig的挖矿程序挖矿了,想查看这个进程的内容,我们首先得找到这个东西,下面就是根据进程名称查找所在目录的方法:linux进程运行后,进程信息存储在/proc/进程id 目录下面,进程...
  • 实验:从整理上理解进程创建、可执行文件的加载和进程执行进程切换,重点理解分析fork、execve和进程切换 进程创建 进程的描述 操作系统内核实现操作系统的三大管理功能,即进程管理、内存管理和文件系统,对应...
  • 下面以redis为例进行说明: 1.执行ps -ef |grep redis 得到进程号7131 2.cd /proc/7131 3.执行 ll -rt ...cwd符号链接的是进程运行目录;... exe符号连接就是执行... fd目录下是进程打开或使用的文件的符号连接。 ...
  • 摘要:本文介绍Linux的应用程序和内核模块获取当前进程执行文件绝对路径的实现方法。 注意:使用此方法时,如果执行一个指向执行文件的链接文件,则获得的不是链接文件的绝对路径,而是执行文件的绝对路径。 应用...
  • 原创作品转载请注明出处 + ...这次主要谈谈可执行文件的执行以及其在内核运行的内部机制。 内容一半是理论,一半是coding。   task_struct数据结构 taskstructtask_structtasks​truct结构就是为进程描述符(p...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,591
精华内容 4,236
关键字:

linux执行文件进程

linux 订阅