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

linux装载和启动可执行程序的过程

罗军 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 基础知识 编译程序的过程 预处理...) 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件 静态链接和动态链接 静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。...在实际的可执行程序或者共享目标文件中,GOT表在名称为.got.plt的section中,PLT表在名称为.plt的section中。   ELF文件符号动态解析的过程 ?   ...load_elf_binary代码 load_elf_binary(struct linux_binprm *bprm) { …… if(elf_interpreter) //使用动态链接...set_thread_flag(TIF_NOTIFY_RESUME); } 设置新的eip和esp,即加载可执行程序启动的地方,我们打印

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

Linux】详解动态库链接和加载&&对可执行程序底层的理解

三、可执行程序的理解 3.1、可执行程序中区域的划分   可执行程序本身是有自己的格式信息的。我们的可执行程序在被加载到内存中之前,程序当中本身就有地址,可执行程序的每一行都是被编址的。...我们的可执行程序在没有加载之前,也已经基本被按照类别(比如权限,访问属性等),已经将可执行程序划分成了各个区域。 text (或 code): 这部分包含了程序的机器代码,即CPU执行的指令。...可执行程序中除了上述说到的信息外,可执行程序的头部信息(表头)包含了关于程序执行所必需的一系列元数据和结构信息, 头部信息中就保存了main函数的起始地址,所以我们的可执行程序本身就知道要从哪里开始执行...3.2、可执行程序的编址 首先在这里需要跟大家明确一个概念,我们进程地址空间中的很多地址数据,都是从可执行程序中来的。...为了初始化进程地址空间,操作系统读取可执行程序的表头。

19810

py 打包 为windows可执行程序

但python也不能落下,毕竟很多代码就是python写的,全部用nodejs复写成本太高了,所以掌握一下python的可执行程序打包方法还是有一定必要,至少先可以把python用起来,把有的功能打包给读者小伙伴的...这时会在工程目录的dist目录下,我们就可以看到打包好的可执行程序了。...用上面命令打包出来的可执行程序在启动运行时,会出现后台终端窗口,这时我们如果想要去掉这个终端,只需要在打包命令后面加上参数-w就可以了,即pyinstaller -F demo.py -w。...PyInstaller常用选项 -h,--help 查看该模块的帮助信息 -F,-onefile 产生单个的可执行文件 -D,--onedir 产生一个目录(包含多个文件)作为可执行程序 -a,--ascii...也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 -n NAME,--name=NAME 指定项目(产生的 spec)名字。

85320

打包python为windows可执行程序

但python也不能落下,毕竟很多代码就是python写的,全部用nodejs复写成本太高了,所以掌握一下python的可执行程序打包方法还是有一定必要,至少先可以把python用起来,把有的功能打包给读者小伙伴的...这时会在工程目录的dist目录下,我们就可以看到打包好的可执行程序了。...用上面命令打包出来的可执行程序在启动运行时,会出现后台终端窗口,这时我们如果想要去掉这个终端,只需要在打包命令后面加上参数-w就可以了,即pyinstaller -F demo.py -w。...PyInstaller常用选项 -h,--help 查看该模块的帮助信息 -F,-onefile 产生单个的可执行文件 -D,--onedir 产生一个目录(包含多个文件)作为可执行程序 -a,--ascii...也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 -n NAME,--name=NAME 指定项目(产生的 spec)名字。

1.6K20

【编程基础】C语言从源程序可执行程序

二.文本信息到可执行程序 不论是.c, .cpp 还是.h文件,所有的这些我们称之为程序的东西都是文本信息。他们都无法被计算机认识。...计算机只认识0和1.所以要让计算机执行我们用文本信息表示的程序,必须将这些文本信息表示的程序翻译成计算机认识的01代码串。...在linux下,以helloworld.c为例,使用gcc编译器,这个翻译过程一般分为以下四个步骤: 1).preprocessing预处理。...4)linking链接 由于我们引用了别的库中的符号,我们需要将这些符号的二进制指令集以某种方式装入到我们程序中,最后经过一些处理后才得到了能被计算机识别的可执行程序。...在linux下,是elf文件。 三. CPU的寻址能力/寻址范围 寻址能力就是CPU能查找的地址的最大范围。 CPU的寻址能力由地址总线的位数决定。

1.2K40

Linux学习-环境变量和可执行属性

文件的可执行属性和环境变量 Linux下文件有一个特殊的属性即可执行属性,用来指示这个文件是一个可执行的脚本或可以运行的二进制文件。前面所提到的这些命令,都具有可执行属性。...在这儿我们用which获取的是可执行的命令所在的路径,进而查看其属性。...ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which cd`" #rwx: 文件所有者可读、可写、可执行 #r-x: 文件所有者所在组其它成员可读、可执行,不可修改 #...所以在以后安装了新的软件,或者写了新的脚本后,都把软件的可执行程序可执行的脚本所在的目录,加到环境变量里面就可以了。...假如系统存在一个python命令,我们自己又安装了一个python (假如在/home/ct/anaconda/bin目录下),如果我们想执行自己的python程序,就需要把/home/ct/anaconda

1.4K90

Linux】进程与可执行程序的关系&&fork创建子进程&&写实拷贝的理解

运行一个程序的时候,本质就是把磁盘中的程序拷贝到内存中,当一个进程运行起来的时候,它本质已经和磁盘中的可执行程序没有直接关系了。...当前我的myprocess程序正在运行 而此时我将其对应的可执行程序删掉 这个进程所对应的可执行程序已经被语法高亮了,证明已经被删掉了   而此时我的可执行程序仍在运行,这也从侧面证明了当一个进程运行起来的时候...,它本质已经和磁盘中的可执行程序没有直接关系了。...从上面的截图中我们也可以看到,/proc目录下的虚拟文件系统是会记录下进程的工作目录和对应可执行程序的路径,/proc目录下记录的进程信息与PCB中的某些信息有重叠,比如说PCB中同样也会记录下进程的工作目录和对应可执行程序的路径...这和linux中的虚拟地址有关,也就是说,一个变量可以指向不同的地址空间。 写实拷贝 任意进程之间是具有独立性的,不会互相影响。

10410

程序搜索功能,云开发搜索,小程序云开发模糊搜索,同时搜索多个字段

今天来给大家讲讲小程序搜索功能。我这里后台数据库用的是小程序云开发的云数据库。所以我们搜索的时候就要借助云开发来实现。 一,需求 比如我这里有如下的一些数据 ?...我们想实现如下搜索需求 1,搜索标题(title)包含‘小石头’的数据 2,搜索标题(title)或者描述(desc)包含‘小石头’的数据 3,搜索标题(title)描述(desc)都包含‘小石头’的数据...所以我们今天就来学习下模糊搜索功能的实现。我们以上面三个需求为例,来一个个讲解。 二,实现原理 我们做模糊搜索的时候,其实就是查询某个字段里是否包含我们的搜索词。...而模糊搜索需要借助RegExp,来看看RegExp是什么。 ?...三,模糊搜索的代码实现 3-1,模糊搜索单个字段 需求:搜索标题(title)包含‘小石头’的数据 代码如下 ? 查询结果如下: ?

1.7K20

【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )

文章目录 一、可执行程序基本结构 二、GOT 全局偏移表 三、可执行程序函数调用步骤 一、可执行程序基本结构 ---- 程序加载到内存中之后 , 会分为以下 3 个部分 : 可执行程序 自定义函数库...: Linux / Android 系统中 .so 动态库 / .a 静态库 , Windows 系统中 .dll 动态库 / .lib 静态库 ; 系统函数库 Java 加载到内存之后 , 是 JAR...; 此时就会存在一个 GOT 全局偏移表 , 当 可执行程序编译 时 , 并 不知道每个函数的具体位置 ; 函数相对于其所在的函数库的相对偏移是确定的 , 但是在不同平台加载时 , 该偏移值是不同的...---- 可执行程序函数调用步骤 : ① 函数调用 : 可执行程序 执行时 , 先调用函数 , 此时不知道 被调用的函数 地址 ; ② 根据 GOT 表跳转函数库 : 跳转到 GOT 表 , GOT...表会横跨 可执行程序 , 自定义库 , 系统库 3 部分 , 在 可执行程序 内部的部分 是 函数库跳转信息 , 先跳转到对应的函数库 ; ③ 在函数库中根据 GOT 表跳转到函数位置 : 然后查找

69320
领券