罗军 + 原创作品转载请注明出处 + 《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,即加载可执行程序启动的地方,我们打印
可执行程序格式 Linux操作系统上的可执行文件格式是ELF(Executable and Linkable Format)。...如下图所示: 因为目标文件.o也是ELF格式,那么将目标文件链接为可执行程序实际上就是将相同属性的section合并: 在Linux操作系统中,通过elf格式的可执行文件,操作系统可以读取文件中的节和段信息...这种文件格式的灵活性和可扩展性,使得Linux系统具有较强的兼容性和可移植性。 2....可执行程序加载 因为可执行程序在Linux内是以ELF格式呈现的,而ELF包含了程序的虚拟地址信息,所以程序在编译形成的时候其虚拟地址就已经确定好了;进程在运行程序时就会读取程序ELF信息来初始化mm_struct...此外可执行程序ELF中还保存了整个程序的入口地址Entry point address,这样当系统执行程序时,除了将ELF中的虚拟地址加载到mm_struct中,还会将整个程序的入口地址赋给CPU的pc
Python生成可执行文件exe 一、安装 pyinstaller pip install pyinstaller 二、使用 pyinstaller 命令 使用示例 相对路径 在程序目录中,运行命令pyinstaller...绝对路径 在程序目录中,运行命令pyinstaller C:\myscript.py 则会在当前执行命令的目录生成dist和build文件夹 常用命令参数 -F 指定打包后只生成一个exe格式的文件...如:pyinstaller -F T1.py 则dist文件只有一个exe格式的文件T1 -i 改变生成程序的icon图标 pyinstaller -F -i ....__file__)))则会把exe打包过程中的路径打包进去,可以使用os.path.dirname(os.path.realpath(sys.argv[0]))获取当前运行py,当前路径 发布者:全栈程序员栈长
三、可执行程序的理解 3.1、可执行程序中区域的划分 可执行程序本身是有自己的格式信息的。我们的可执行程序在被加载到内存中之前,程序当中本身就有地址,可执行程序的每一行都是被编址的。...我们的可执行程序在没有加载之前,也已经基本被按照类别(比如权限,访问属性等),已经将可执行程序划分成了各个区域。 text (或 code): 这部分包含了程序的机器代码,即CPU执行的指令。...可执行程序中除了上述说到的信息外,可执行程序的头部信息(表头)包含了关于程序执行所必需的一系列元数据和结构信息, 头部信息中就保存了main函数的起始地址,所以我们的可执行程序本身就知道要从哪里开始执行...3.2、可执行程序的编址 首先在这里需要跟大家明确一个概念,我们进程地址空间中的很多地址数据,都是从可执行程序中来的。...为了初始化进程地址空间,操作系统读取可执行程序的表头。
IDEA 导出可执行的Jar 换了Idea后今天需要把项目打成 jar放到服务器上运行,稍微整理一下。...or corrupt jarfile xxx.jar 通常的原因在于xxx.jar文件过大,建议在pom.xml文件中排除不必要的依赖 备注:Jar文件在传输过程中损坏也会导致该错误[vServer Linux...– Start jar: Invalid or corrupt jarfile ](https://stackoverflow.com/questions/32299659/vserver-linux-start-jar-invalid-or-corrupt-jarfile...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185771.html原文链接:https://javaforall.cn
但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)名字。
测试环境 Linux kali 5.9.0-kali1-amd64 Go version go1.18.1 linux/amd64 Windows 2003支持的Golang版本为:1.10.8 386
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128788.html原文链接:https://javaforall.cn
二.文本信息到可执行程序 不论是.c, .cpp 还是.h文件,所有的这些我们称之为程序的东西都是文本信息。他们都无法被计算机认识。...计算机只认识0和1.所以要让计算机执行我们用文本信息表示的程序,必须将这些文本信息表示的程序翻译成计算机认识的01代码串。...在linux下,以helloworld.c为例,使用gcc编译器,这个翻译过程一般分为以下四个步骤: 1).preprocessing预处理。...4)linking链接 由于我们引用了别的库中的符号,我们需要将这些符号的二进制指令集以某种方式装入到我们程序中,最后经过一些处理后才得到了能被计算机识别的可执行程序。...在linux下,是elf文件。 三. CPU的寻址能力/寻址范围 寻址能力就是CPU能查找的地址的最大范围。 CPU的寻址能力由地址总线的位数决定。
如果能够将这两个文件合并为一个可执行文件,那安装的过程就更简单明了。 2、代码保护。对于一段脚本,提供给用户使用,但是不希望用户看到脚本的内容,可以通过将脚本发布为.bin的形式。...shc的用法比较简单,下载后make生成可执行文件,然后直接对脚本进行加密,会生成两个文件。一个以.x结尾,为可执行的二进制文件。另一个以.x.c结尾,为生成的中间c文件。...shc还能指定可执行脚本的过期时间。...参考资料: 1、Linux .bin安装文件制作 2、dos2unix 3、linux下制作二进制bin 文件制做方法 4、shc 5、How to Encrypt Your Bash Shell...Script on Linux Using SHC
文件的可执行属性和环境变量 Linux下文件有一个特殊的属性即可执行属性,用来指示这个文件是一个可执行的脚本或可以运行的二进制文件。前面所提到的这些命令,都具有可执行属性。...在这儿我们用which获取的是可执行的命令所在的路径,进而查看其属性。...ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which cd`" #rwx: 文件所有者可读、可写、可执行 #r-x: 文件所有者所在组其它成员可读、可执行,不可修改 #...所以在以后安装了新的软件,或者写了新的脚本后,都把软件的可执行程序和可执行的脚本所在的目录,加到环境变量里面就可以了。...假如系统存在一个python命令,我们自己又安装了一个python (假如在/home/ct/anaconda/bin目录下),如果我们想执行自己的python程序,就需要把/home/ct/anaconda
运行一个程序的时候,本质就是把磁盘中的程序拷贝到内存中,当一个进程运行起来的时候,它本质已经和磁盘中的可执行程序没有直接关系了。...当前我的myprocess程序正在运行 而此时我将其对应的可执行程序删掉 这个进程所对应的可执行程序已经被语法高亮了,证明已经被删掉了 而此时我的可执行程序仍在运行,这也从侧面证明了当一个进程运行起来的时候...,它本质已经和磁盘中的可执行程序没有直接关系了。...从上面的截图中我们也可以看到,/proc目录下的虚拟文件系统是会记录下进程的工作目录和对应可执行程序的路径,/proc目录下记录的进程信息与PCB中的某些信息有重叠,比如说PCB中同样也会记录下进程的工作目录和对应可执行程序的路径...这和linux中的虚拟地址有关,也就是说,一个变量可以指向不同的地址空间。 写实拷贝 任意进程之间是具有独立性的,不会互相影响。
在cmd或者powershell执行以下命令set GOARCH=amd64go env -w GOARCH=amd64set GOOS=linuxgo env -w GOOS=linux然后正常go...build即可再切换回windowsgo env -w GOARCH=amd64go env -w GOOS=windows又可以愉快的编译exe可执行文件啦
文章目录 一、可执行程序基本结构 二、GOT 全局偏移表 三、可执行程序函数调用步骤 一、可执行程序基本结构 ---- 程序加载到内存中之后 , 会分为以下 3 个部分 : 可执行程序 自定义函数库...: Linux / Android 系统中 .so 动态库 / .a 静态库 , Windows 系统中 .dll 动态库 / .lib 静态库 ; 系统函数库 Java 加载到内存之后 , 是 JAR...; 此时就会存在一个 GOT 全局偏移表 , 当 可执行程序编译 时 , 并 不知道每个函数的具体位置 ; 函数相对于其所在的函数库的相对偏移是确定的 , 但是在不同平台加载时 , 该偏移值是不同的...---- 可执行程序函数调用步骤 : ① 函数调用 : 可执行程序 执行时 , 先调用函数 , 此时不知道 被调用的函数 地址 ; ② 根据 GOT 表跳转函数库 : 跳转到 GOT 表 , GOT...表会横跨 可执行程序 , 自定义库 , 系统库 3 部分 , 在 可执行程序 内部的部分 是 函数库跳转信息 , 先跳转到对应的函数库 ; ③ 在函数库中根据 GOT 表跳转到函数位置 : 然后查找
main.py 中的所有依赖项将被打包到这个可执行文件中。--onefile:它指定将所有程序文件和依赖项打包成一个单独的可执行文件。...这意味着生成的可执行文件包含了你的主程序文件以及所有依赖的模块和库,使得你只需分发一个文件,而不是多个文件。3、找到生成的可执行文件: 在 dist 目录中找到生成的可执行文件。...这个文件的名称通常与你的主程序文件(main.py)相同,例如,main.exe。4、 将可执行文件拷贝到目标计算机: 将生成的可执行文件拷贝到目标计算机上,然后在目标计算机上运行它。...bash 代码解读复制代码pyinstaller --onefile --noconsole main.py2、在脚本中隐藏窗口(只在Windows上有效)如果你的程序是一个图形界面应用程序,你可以在你的...一些窗体库(例如tkinter)可能需要特殊处理来设置程序窗口的图标。在这种情况下,你可能需要在程序代码中设置图标。
进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。...Linux进程的五个段 下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。...代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。...这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。...BSS段的大小从可执行文件中得到 ,然后链接器得到这个大小的内存块,紧跟在数据段后面。当这个内存区进入程序的地址空间后全部清零。包含数据段和BSS段的整个区段此时通常称为数据区。
1.选择屏幕展示 2.查找结果 3.源码 *&---------------------------------------------------------...
这里我们使用的案例是通过TMalign这个蛋白质打分文件,在编译好可执行文件之后,可以使用建立软链接的方法快捷的使用该可执行文件。...Mac可能需要去掉static): $ g++ -static -O3 -ffast-math -lm -o TMalign TMalign.cpp 编译之后就会在当前路径下生成一个名为TMalign的可执行文件...,有时候会遇到想把可执行文件放在特定的路径下的问题,比如放到/usr/bin目录下,这样可以全局可调用,又不需要手动添加各种乱七八糟的系统路径。...这就需要使用到Linux中的软链接的功能,通常使用ln -s的指令即可。...本文顺带介绍了蛋白质结构评分软件TMalign的源码下载和安装使用的基本方法,编译成一个可执行文件后,可以建立一个软链接,在系统各处都可以使用,是一个比较基础的操作。
如何将编写的c语言程序打包成exe可执行文件呢? 以前我们写程序很多是在编辑器上,让编辑起来编译运行我们的程序。如果想将其打包成exe可执行文件该如何做?...gcc包括c和c++编译器 gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译。 我们用gcc命令来编译我们的c语言程序。...gcc的用法 gcc test.c这样将编译出一个名为a.out的程序 gcc test.c -o test这样将编译出一个名为test的程序 -o参数用来指定生成程序的名字 我们一般用这个gcc...打包后的exe文件一旦打开就执行了程序。 欢迎猿友们访问留言。 相关的请遵守csdn协议 -------jgdabc
领取专属 10元无门槛券
手把手带您无忧上云