精华内容
下载资源
问答
  • linux的可执行文件是什么后缀

    千次阅读 2020-03-05 09:32:26
    只要设了执行权限,有elf文件头,就可以看成可执行文件,要是纯文本文件也可以看成是可执行的脚本。一部分下载的商业软件安装程序之类的可执行文件有.bin的后缀。有些时候可执行文件的后缀名为.out。Linux下的后缀名...

     一般没有后缀,linux一般可以自动识别文件类型,有很多类型都不用加后缀。只要设了执行权限,有elf文件头,就可以看成可执行文件,要是纯文本文件也可以看成是可执行的脚本。一部分下载的商业软件安装程序之类的可执行文件有.bin的后缀。有些时候可执行文件的后缀名为.out。Linux下的后缀名并没用windows下那么有用,Linux不根据扩展名判断文件类型,而是根据文件的内容来判断。所以扩展名的作用是帮助人来识别文件,对于Linux系统本身来说没有什么用处。
    可执行文件:
             指计算机的操作系统能够解释并执行的二进制代码文件。最初的可执行文件包括代码段、数据段、堆栈段和扩展段等。代码段存放了计算机的执行指令,即CPU要进行的操作指令,数据段存放了CPU要用到的数据,堆栈段则存放了与寄存器有关的信息等等。现在你觉得许多文件都能够被计算机执行,是因为操作系统已经做得比较人性化,例如你双击一个文本文件(*.txt),该文件即被打开,这是因为操作系统调用了Notepad.exe这个可执行文件打开了这个文本文件。实际上,被执行的文件是Notepad.exe,而文本文件只是Notepad.exe的执行目标

    elf:

    (Executable and Linking Format)是可执行连接格式 
             可执行连接格式是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface(ABI)而开发和发布的。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操作系统之间可移植的二进制文件格式。

    展开全文
  • ELF可执行文件的理解

    千次阅读 2019-08-06 17:23:15
    ELF可执行文件的理解 ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(object files)中都放了什么东西、以及都以什么样的格式去放这些东西。ELF是构成众多xNIX系统的基础...

    ELF可执行文件的理解

           ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(object files)中都放了什么东西、以及都以什么样的格式去放这些东西。ELF是构成众多xNIX系统的基础之一。

    1 对象文件的三个种类

    1.1 可重定位的对象文件(Relocatable object file)

           这是由汇编器汇编生成的.o文件。链接器(link editor)拿一个或一些Relocatable object files作为输入,经链接处理后,生成一个可执行的对象文件(Executable object file)或者一个可被共享的对象文件(Shared object file)。可以使用ar工具将众多的.o可重定位的对象文件归档成.a静态库文件。

    1.2 可执行的对象文件(Executable object file)

           文本编辑器vi、调试用的工具gdb、播放MP3歌曲的软件mplayer等等都是Executable object file,另外一种可执行的脚本(如shell脚本),不是可执行的对象文件,只是文本文件,但是执行这些脚本所用的解释器就是executable object file,比如bash shell程序。

    1.3 可被共享的对象文件(Shared object file)

           这些就是所谓的动态库文件,也即.so文件。如果拿前面的静态库来生成可执行程序,那每个生成的可执行程序中都会有一份库代码的拷贝。动态库在发挥作用的过程中,必须经过两个步骤:

    1. 链接编辑器(link editor)拿它和其他Relocatable object file以及其他shared object file作为输入,经链接处理后,生成另外的shared object file或者executable file。
    2. 在运行时,动态链接器(dynamic linker)拿它和一个executable file以及另外一些shared object file来一起处理,在Linux系统里面创建一个进程映像。

    2 section

           在ELF对象文件的最前面有一个ELF头文件,里面记载了所适用的处理器、对象文件类型等各种信息。下图描述了ELF对象文件的基本组成:

     

           为什么左右两个类似的图来说明ELF的组成格式?这是因为ELF格式需要使用在两种场合:(1)组成不同的可重定位文件,以参与可执行文件或者可被共享的对象文件的连接构建;(2)组成可执行文件或者可被共享的对象文件,以在运行时内存中进程映像的构建。

           Section是在ELF文件里头,用以装载内容数据的最小容器,是被链接器使用的。在ELF文件里面,每一个section内都装在了性质属性都一样的内容,比方:

    1) .text section 里装载了可执行代码;

    2) .data section 里面装载了被初始化的数据;

    3) .bss section 里面装载了未被初始化的数据;

    4) 以 .rec 打头的 sections 里面装载了重定位条目;

    5) .symtab 或者 .dynsym section 里面装载了符号信息;

    6) .strtab 或者 .dynstr section 里面装载了字符串信息;

    7) 其他还有为满足不同目的所设置的section,比方满足调试的目的、满足动态链接与加载的目的等等。

           一个ELF文件中到底有哪些具体的section,由包含在这个ELF文件的section head table(SHT)决定。在SHT中,针对每一个section,都设置一个条目,用来描述对应的这个section,其内容主要包括该section的名称、类型、大小以及在整个ELF文件中的字节偏移位置等等。

           链接器在链接可执行文件或动态库的过程中,它会把来自不同可重定位对象文件中的相同名称的section合并起来构成同名的section。接着,它又会把带着相同属性(比方都是只读并可加载的)的section都合并成所谓segment(段)。Segment作为链接器的输出,常被称为输出section。开发者可以控制哪些不同.o文件的section来最后合并构成不同名称的segment。

           一个单独的 segment 通常会包含几个不同的 sections,比方一个可被加载的、只读的segment 通常就会包括可执行代码section .text、只读的数据section .rodata以及给动态链接器使用的符号section .dymsym等等。section 是被链接器使用的,但是 segments 是被加载器所使用的。加载器会将所需要的 segment 加载到内存空间中运行。和用 sections header table 来指定一个可重定位文件中到底有哪些 sections 一样。在一个可执行文件或者动态库中,也需要有一种信息结构来指出包含有哪些 segments。这种信息结构就是 program header table,如ELF对象文件格式中右边的 execute view 所示的那样。

           为什么会有这样的一个segment?这是因为我们写的应用程序通常都需要使用动态链接库.so。程序在Linux里面是怎样运行起来的?当在shell中敲入一个命令要执行时,内核会帮我们创建一个新的进程,它再往这个新进程的进程空间里面加载进可执行程序的代码段和数据段后,也会加载进动态链接器(在Linux里面通常就是 /lib/ld-linux.so 符号链接所指向的那个程序,它本身就是一个动态库)的代码段和数据。在这之后,内核将控制传递给动态链接库里面的代码。动态链接器接下来负责加载该命令应用程序所需要使用的各种动态库。加载完毕,动态链接器才将控制传递给应用程序的main函数。这样应用程序才得以运行。

           头文件中最重要的三个segment是:代码段、数据段和堆栈段。

    展开全文
  • 1.C语言创建程序 1.1C语言创建(分为4个步骤) 编辑 ...编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。 (该部分编译是指汇编器编译汇编语言或者编译器编译...

    转自:https://www.jianshu.com/p/7c609b70acbd

    1.C语言创建程序

    1.1C语言创建(分为4个步骤)
    • 编辑
    • 编译
    • 链接
    • 执行

    编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。
    编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。
    (该部分编译是指汇编器编译汇编语言或者编译器编译高级语言)
    链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组成一个可执行的文件。在windows下扩展名为.exe,Unix下无扩展名。
    执行:运行程序。

    C.png
    1.2什么是源代码,目标文件,可执行文件。

    源代码 ——源文件就是存放程序代码的文件。通常我们编辑代码的文件就是源文件。

    • 源代码相对目标代码和可执行代码而言的。
    • 源代码就是用汇编语言和高级语言写出来的地代码。

    目标文件——指源代码经过编译程序产生的能被cpu直接识别二进制代码。

    • 目标代码指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码或接近于机器语言的代码组成。
    • 目标文件包括着机器代码(可直接被计算机中央处理器履行)和代码在运行时使用的数据,如重定位信息,如用于链接或调试的程序符号(变量和函数的名字),另外还包括其他调试信息。
    gcc -c main.c 
    编译main.c ,生成目标文件main.o,但不进行link. 
    gcc -o main.o
    链接成可执行文件main

    可执行文件——可执行代码就是将目标代码连接后形成的可执行文件,当然也是二进制的。 连接程序系统库文件连接就生成可执行文件。

    例如:*.obj是程序编译之后生成的目标文件,连接程序再将这个文件与系统库文件连接就生成可执行文件
    
    1.3链接器的作用
    Screen Shot 2017-06-12 at 4.32.06 PM.png

    根据上面的图,我们可以看到链接器还额外链接了2个部分。

    目标代码文件中所缺少的第一个元素是一种叫做启动代码(Start-up code)的东西,此代码相当于您的程序和操作系统之间的接口。例如你可以在dos 或Linux下运行一个 IBM PC 兼容机,在两种情况中硬件是相同的,所以都会使用同样的目标代码,但是 DOS与Linux要使用不用的启动代码,因为这两种系统处理程序的方式不同的。

    所缺少的第二个元素是库例程的代码。几乎所有C程序都利用标准库中所包含的例程(称为函数)。例如,程序中的函数printf()。目标代码文件不包含这一函数的指令。实际代码存储在另一个称为“库”的文件中,库文件中包含许多函数的目标代码。

    链接器的作用是将这3个元素(目标代码、系统的标准启动代码和库代码)结合在一起,并将他们存放在单个文件,即可执行文件中。对库代码来说,链接器只从库中提取您所使用的函数所需的代码。

    可以得出结论:目标文件和可执行文件都是由机器语言指令组成的。但目标文件只包含您所编写的代码转换成的机器语言,而可执行文件还包含您所使用的库例程以及启动代码。

    下面这幅图能大致说明一下链接的情况。


    1.png

    这是一个main.o目标代码,内部有main,foo,bar三个函数。

    U main表示main这个符号在crtl1.o中用到了,但是没有定义。因此需要main.o提供定义并和crtl1.o链接在一起。main整个程序的入口实际上是_crtl1.o中的 _start,它做了一些初始化工作(启动历程),然后调用C代码中提供的main.c函数。libc是运行时候动态链接libc共享库(库中包含常用的函数)。

    所以程序的入口点其实是_start,main函数实际上是被_start调用。

    1.4gcc命令图
    QQ截图20170613151139.png

    2.ELF文件(该部分分析目标文件和可执行文件的,涉及部分汇编指令)

    ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型:

    • 可重定位的目标文件
    • 可执行文件
    • 共享库

    ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section HeaderTable描述的一系列Section的集合,而执行一个ELF文件时,在加载器(Loader)看来它是 由Program Header Table描述的一系列Segment的集合。如下图所示。


    Screen Shot 2017-06-10 at 10.01.54 PM.png

    左边是从汇编器和链接器的视角来看这个文件,开头的ELF Header描述了体系结构和操作系统 等基本信息,并指出Section Header Table和Program Header Table在文件中的什么位 置,Program Header Table在汇编和链接过程中没有用到,所以是可有可无的,Section Header Table中保存了所有Section的描述信息。右边是从加载器的视角来看这个文件,开头 是ELF Header,Program Header Table中保存了所有Segment的描述信息,Section Header Table在加载过程中没有用到,所以是可有可无的。注意Section Header Table和ProgramHeader Table并不是一定要位于文件开头和结尾的,其位置由ELF Header指出,上图这么画只是为了清晰。

    目标文件需要链接器做进一步处理,所以一定有Section Header Table;可执行文件需要加载运行,所以一定有Program Header Table;而共享库既要加载运行,又要在加载时做动态链接, 所以既有Section Header Table又有Program Header Table。

    • section:C语言内存中的.text,.data,.bss.....
    • Segment:是指在程序运行时加载到内存的具有相同属性的区域,由一个或多个Section组成,比如有两个Section都要求加载到内存后可读可写,就属于同一个Segment。有些Section只对汇编器和链接器有意义,在运行时用不到,也不需要加载到内 存,那么就不属于任何Segment 。

    2.1重定位目标文件

    在进行该部分之前,我们先查看一下网上的部分重定位目标文件的资料。

    资料一:

    汇编器所产生的目标文件至少包括三个区,即文本区(text),数据区(data)和bss区。文本区一般包括程序的代码和常量,数据区通常存放全局变量等内容,bss区用于存放未初始化的变量或作为公共变量存储空间。在一个目标文件中,其text区从地址0开始,随后是data区,再后面是bss区。而要运行程序,必须装载到内存中,所以这些区的地址需要在内存中重新安排,也就是重定位。

    资料二:

    编译器编译后产生的目标文件是可重定位的程序模块,并不能直接运行,链接就是把目标文件和其他分别进行编译生成的程序模块(如果有的话)及系统提供的标准库函数连接在一起,生成可运行的可执行文件的过程。
    重定位是链接器在完成符号解析后(知道了各个输入模块的代码段和数据段的大小)的一个步骤,其作用顾名思义就是重新定位,确定比如指令,全局变量等在运行时的存储器地址。

    资料三:

    比如说两个编译后的可重定位目标文件obj1.o和obj2.o
    在obj1.o里面定义了一个全局变量glob(在obj1里面记录了glob相对于该文件数据段的相对地址), 而obj2.0里面又引用了这个全局变量glob。
    链接的重定位就是要确定在链接后的可执行程序中glob的地址,而不是相对于obj1的地址,从而使obj2也能通过地址调用glob。
    当然重定位并不只是全局变量,还包括外部函数,指令等运行时地址的确定

    资料四:

    当你在程序中写上一个全局变量或者是一个函数时,这个定位过程会经历几个阶段:
    1.在这个目标文件中的相对定位,一个目标文件中对此文件中的所有函数,变量进行符号描述,比如一个变量A,它所占的相对地址是多少?是全局的?或者是静态的,或者是外部的??
    2.在连接多个目标成一个可执行文件时,会再次对这个变量进行重定位,也就是在这个可执行文件中进行对此变量进行描述,同目标文件中的描述差不多,只不过此变量不再有外部,内部之分,都成了本地变量,并且会将所有全局变量存放在一定的逻辑地址中,这是通过连接脚本文件与各个目标文件中的相对地址共同决定的
    3.最终的操作系统加载这个可执行文件时,会对这些变量与函数地址再次进行重定位,其方式就是首先分析这个可执行文件中的不同段,读出相应的描述表,然后通过逻辑地址与物理地址进行映射出,最终就将可执行的二进制码加进了真实的物理内存了,关于分析可执行文件格式与物理地址的转换,不同的CPU与操作系统的实现方式会有不同之处

    接下来我们开始实践部分,首先写一个求一组数的最大值的汇编程序max.s。

    Screen Shot 2017-06-11 at 3.42.29 PM.png

    现在有一个max.o目标文件,我们用readlf工具读取其ELF Header和Section Header Table


    Screen Shot 2017-06-10 at 10.20.59 PM.png

    ELF Header中描述了操作系统是UNIX,体系结构是80386。Section Header Table中有8个Section Header,从文件地址200
    (0xc8)开始,每个Section Header占40字节,共320字节,到文件地址0x207结束。这个目标文件没有Program Header。文件地址是这样定义的:文件开头第一个字节的地址是0,然后每个字节占一个地址。

    QQ图片20170611130217.png

    从Section Header中读出各Section的描述信息。
    Addr是这些段加载到内存中的地址(程序中的地址都是虚拟地址),加载地址要在链接时填写,现在空缺,所以是全0。
    OffSize两列指出了各Section的文件地址,比如.data段从文件地址0x60开始,一共0x38个字节,回去翻一下程序,.data段定义了14个4字节的整数,一共是56个字节,也就是0x38。

    根据以上信息可以描绘出整个目标文件的布局。

    QQ图片20170611132839.png

    ** Section Header Table**:读出各Section的描述信息。
    .shstrtab:保存着各Section的名字,比如.text,.data.....。
    .strtab:保存着程序中用到的符号的名字.比如汇编程序的start_loop:和loop_exit符号。(对应的就是for循环)。
    **.data **:保存程序中已初始化的全局变量和静态变量以及字符串常量。
    .bss:存放程序中未初始化的全局变量和静态变量。
    .text:存放程序执行代码。
    .rel.text:告诉链接器指令中的哪些地方需要做重定位。
    下节分析。

    Screen Shot 2017-06-11 at 2.40.30 PM.png

    我们看一下.text段内容


    Screen Shot 2017-06-11 at 3.44.53 PM.png

    ![Uploading QQ截图20170613113520_952796.png . . .]

    text段代码中,一些跳转指令和内存访问指令中的地址都是符号的相对地址,下一步链接器要修改这些指令,把其中的地址都改成加载时的内存地址,这些指令才能正确执行。

    2.2可执行文件

    现在分析可执行文件max。


    Screen Shot 2017-06-11 at 2.45.59 PM.png
    Screen Shot 2017-06-11 at 2.47.07 PM.png
    Screen Shot 2017-06-11 at 2.47.43 PM.png
    Screen Shot 2017-06-11 at 2.48.05 PM.png

    在ELF Header中,Type改成了EXEC,由目标文件变成可执行文件了多了两个Program Header,少了两个Section Header。

    在Section Header Table中,.text和.data的加载地址分别改成了0x0804 8074和0x0804 90a0。.bss段没有用到,所以被删掉了。.rel.text段就是用于链接过程的,链接完了就没用 了,所以也删掉了。

    多出来的Program Header Table描述了两个Segment的信息。.text段和前面的ELF Header、Program Header Table一起组成一个Segment(FileSiz指出总长度 是0x9e),.data段组成另一个Segment(总长度是0x38)。VirtAddr列指出第一 个Segment加载到虚拟地址0x0804 8000,第二个Segment加载到地址0x0804 90a0。Flg列指出第一个Segment的访问权限是可读 可执行,第二个Segment的访问权限是可读可写。

    Screen Shot 2017-06-11 at 2.54.13 PM.png

    原来目标文件符号表中的Value都是相对地址,现在都改成绝对地址了。

    我们查看一下.txt段内容。


    Screen Shot 2017-06-11 at 3.32.25 PM.png
    现在我们对比一下目标文件和可执行文件的不同。

    目标文件.text和.data段地址


    QQ截图20170613113520.png

    可执行文件.text和.data段地址


    QQ截图20170613113500.png

    目标文件中跳转指令


    Screen Shot 2017-06-11 at 3.35.56 PM.png

    可执行文件中跳转指令


    Screen Shot 2017-06-11 at 3.36.18 PM.png

    目标文件中内存访问指令


    Screen Shot 2017-06-11 at 3.37.08 PM.png

    可执行文件中内存访问指令


    • 可以看到指令中的相对地址都改成绝对地址了。
    • 结合上2部分分析,我们可以看到。
    • .text和.data段代码加载到内存中的地址由空缺0变成了具体地址。
    • .text段代码中一些跳转指令和内存访问指令中的地址由相对地址改成加载时的内存地址,
    • .data段代码也由相对地址改为绝对地址。

    3.静态库和共享库

    :有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程序中都会用到libc中的库函数(例如printf)。

    共享库和静态库的区别:在链接libc共享库时只是指定了动态链接器和该程序所需要的库文件,并没有真的做链接,可执行文件调用的libc库函数仍然是未定义符号,要在运行时做动态链接。而在链接静态库时,链接器会把静态库中的目标文件取出来和可执行文件真正链接在一起。

    • 静态库链接后,指令由相对地址变为绝对地址,各段的加载地址定死了。
    • 共享库链接后,指令仍是相对地址,共享库各段的加载地址并没有定死,可以加载到任意位置。

    静态库好处:静态库中存在很多部分,链接器可以从静态库中只取出需要的部分来做链接 (比如main.c需要stach.c其中的一个函数,而stach.c中有4个函数,则打包库后,只会链接用到那个函数)。另一个好处就是使用静态库只需写一个库文件名,而不需要写一长串目标文件名。

    该部分是参照《一站式学习C编程》所做的总结,理解程度比较初步。

    展开全文
  • linux 查找可执行文件

    万次阅读 2018-03-23 10:33:31
    转自:https://www.cnblogs.com/binyue/p/4707948.htmlLinux下的可执行文件Linux下如何查找可执行文件,作为一个Linux小菜刚刚有了这个问题,在windows中,可以通过后缀名判断是否是可执行文件,比如.exe,.bat等是...

    转自:https://www.cnblogs.com/binyue/p/4707948.html

    Linux下的可执行文件

    Linux下如何查找可执行文件,作为一个Linux小菜刚刚有了这个问题,

    在windows中,可以通过后缀名判断是否是可执行文件,比如.exe,.bat等是可执行文件,但是在Linux下呢?

    Linux下不能简单根据文件后缀判断是否可执行。

    linux下判断一个文件是否可执行,关键看是否有可执行权限,比如:

    在终端中输入:ls -l ,会列出类似于下的列表:

    -rwxrwxr-x 1 bingyue bingyue 48141 Jul 17 02:50 redis-trib.rb*
    -rw-rw-r-- 1 bingyue bingyue 2163 Aug 5 23:34 release.c
    drwxrwxr-x 2 bingyue bingyue 4096 Jul 22 20:03 Documents

      以下面输出为例,下划线区域说明了文件的权限,包括可读、可写、可执行等等。

    【-】【rwx】【rwx】【r-x】 1 bingyue bingyue 2324109 Aug 5 23:35 redis-cli*

    10个字符确定不同用户能对文件干什么:
    第一个字符代表文件(-)、目录(d),链接(l)
    其余字符每3个一组(rwx),读(r)、写(w)、执行(x),分别说明文件所有者(User)、文件所有者所在的用户组其他用户(Group)、其他组用户(Others)对该文件拥有的权限。

    第一组rwx:文件所有者的权限 是读、写和执行
    第二组rwx:与文件所有者同一组的用户的权限是读、写和执行
    第三组r-x:不与文件所有者同组的其他用户的权限是读和执行,不能写

    另外有部分文件也可以通过后缀名判断,比如redhat中,凡是.rpm格式的都能在redhat中执行,debian中.deb格式的在debianlinux中能直接执行。

    如何查找可执行文件

    使用
    ls -F|grep "*"

    Ubuntu下也可以使用

    ll | grep "*"
    ll不是linux下一个基本的命令,可以认为是ls -l的一个别名。

    ls -F可以把文件按照类型归类,并且在末尾加上/ *等符号标识。
    -F, --classify append indicator (one of */=>@|) to entries,
    -F和--classify选项可以对列表查看文件添加后缀。普通文件不添加后缀,对可执行文件添加*号,为目录添加/号,为符号链接添加@号。
    | 管道输出,grep "*" 从中挑出以"*"结尾的行并输出。

    类似的,
    使用ls -F|grep "/" 可以查找目录
    使用ls -F|grep "@" 可以查找软连接

     

    另外,使用ls -color 可以标识出可执行文件:

    实例输出:

    展开全文
  • linux可执行文件格式

    万次阅读 2017-05-24 23:27:05
    1. 可执行文件的任务: 可执 行文件的创建: 编译(compile): 源程序文件被编译成目标文件, 连接(link): 多个目标文件 被连接成一个最终的可执行文件可执行文件的运行: 可执行文件被加载(load)到内存中执行。...
  • 判断文件是否是可执行文件

    千次阅读 2005-02-10 21:58:00
    判断文件是否是可执行文件其实可以调用API函数GetBinaryType来完成。但是我不想用这个方法,因为还有其他的方法来判断,虽然这样比较麻烦,也不一定特别的准,但是我觉得这可以让我们对文件有所了解。好,lets go! ...
  • 就是eclipse无法运行,双击 eclipse.run 提示 没有为可执行文件 文件类型安装应用程序。, 'Microsoft Yahei' !important; text-shadow: rgb(153, 153, 153) 0.01em 0.01em 0.01em !important;" />各位朋友指点指点,...
  • Linux 可执行文件结构与进程结构

    千次阅读 多人点赞 2015-04-19 10:15:38
    Linux可执行文件结构 在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况: 可以看出,此可执行文件在存储时(没有调入到内容)分为代码区(text)、数据区(data)和未初始化数据...
  • ubuntu 把文件设置为可执行文件

    千次阅读 2017-03-15 09:23:53
    有两种办法把文件设置为可执行文件。 1) 直接在文件属性标签中选中 "可执行",--b 如果用的是图形界面,这个方法最简单直接。 2) 使用命令 chmod +x file.sh。将可执行属性添加到文件属性中。 然后,执行这...
  • 目标文件和可执行文件的区别

    千次阅读 2015-07-12 19:50:37
    可执行文件也是一种目标文件。 UNIX环境下主要有三种类型的目标文件: 可重定位文件  其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。 共享的目标文件  静态链接库和...
  • linux可执行文件的后缀是什么?

    万次阅读 2014-04-10 22:11:47
    一般来说,可执行文件没有扩展名。 Linux不根据扩展名判断文件类型,而是根据文件的内容来判断。所以扩展名的作用是帮助人来识别文件,对于Linux系统本身来说没有什么用处。 .sh结尾表示是shell脚本文件,但是不...
  • ELF文件、目标文件、可执行文件的关系 目标文件是源代码经过编译但未进行链接的那些中间文件,在linux中的.o文件,它跟可执行文件的内容与结构很相似,所以一般与可执行格式采用一种方式存储,在linux下,我们可以...
  • Android可执行文件

    千次阅读 2018-07-19 15:56:23
    处理aidl文件, 生成相应接口文件 javac编译工程文件, 生成class文件 NDK编译C/C++文件 dx转换所有class文件生成classes.dex (压缩常量池等工作) apkbuilder打包生成apk jarsigner或signapk给apk签名 ...
  • ELF 文件规范   ELF(Executable and Linking Format)是一个二进制文件规范。...  现在流行的可执行文件格式 (Executable File Format),主要是 Windows 下的 PE(Portable Executable)和 Linux 的 EL...
  • 一个可执行文件是怎么来的

    千次阅读 2015-11-02 09:35:55
    一个可执行文件的生成一般都要经过下面几个步骤: 编辑 、预处理 、 编译、优化、汇编 、 连接 ——>可执行文件 下面将从这几个步骤一个一个来分析他们的具体内容。 1. 编辑 编辑这个过程其实挺简单的,但也是最...
  • 我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,(关于源代码到可执行文件的介绍见我的另一篇博客:程序从代码到可执行文件的过程简述)那么当我们在cmd窗口敲出指令$test argv1 argv2\n 后,操作系统...
  •  2、可执行文件,例如/bin/bash; 3、共享目标文件,例如/lib/libc.so。 在Linux 可重定位文件 ELF结构一文中,我们已经分析了可重定位文件ELF结构。本文分析可执行文件的ELF结构。 首先附上源代码:#include ...
  • linux下查看可执行文件的相关信息

    千次阅读 2017-03-09 14:07:20
    1. file 可执行文件 可查看可执行文件是ARM架构还是X86架构  2. nm 可执行文件 可查看文件中的符号,包括全局变量,全局函数等  3. ldd 可执行文件 可查看文件执行所需要的动态库  4. strings 可执行文件 可查看...
  • FFmpeg中可执行文件ffprobe用法汇总

    千次阅读 2019-08-13 17:11:42
    从https://ffbinaries.com/downloads 下载最新的4.1版本的Windows 64位FFprobe,FFprobe用于从多媒体流中...通过执行以下命令将FFprobe信息重定位到ffprobe_help.txt文件中便于查看,FFprobe使用方法为:ffprobe.exe...
  • Linux下可执行文件格式详解

    万次阅读 2014-08-21 17:49:31
    Linux 可执行文件 ELF格式
  • Windows可执行文件简述

    千次阅读 2008-06-09 18:58:00
    在Windows操作系统中,一个用户可以最直接体会到的文件的形式就是以.exe、.dll等为扩展名的可执行文件。伴随着Windows操作系统的不断进步,其可执行文件的格式也发生了巨大变化。这期间主要有4个过程:DOS中出现的最...
  • Android执行Native可执行文件

    千次阅读 2017-09-04 23:47:49
    参考: ... ... ...file一下,查看文件类型 ...发现是ARM平台的32-bit的可执行文件,Mac上显然是无法执行的 然后放到我的Nubia上(5.0)发现无法执行。 那就放到文档Nexus 5上(4.4)吧,终于执行成功啦
  • Unix文件类型

    千次阅读 2017-08-12 12:49:54
    UNIX系统的大多数文件是普通文件或目录,但是也有另外一些文件类型文件类型包括如下几种。(1)普通文件(regular file).这是最常用的文件类型,这种文件包含了某种形式的数据。...所有二进制可执行文件都遵循
  • C++源代码如何生成可执行文件

    千次阅读 2017-09-01 16:08:49
    先看一段最简单的代码: ...如何把上面的代码转换成可执行的代码呢,通常我们可以用gcc hello.c 在同样的路径下得到一个a.out的可执行文件。 其实gcc 编译链接一个可执行文件分为4个步骤:  1 预处理
  • java程序变成exe可执行文件

    千次阅读 2017-11-08 22:48:23
    将java编织成.class后,如果只是用java命令来执行总觉得不是太过瘾,找个办法生成像exe文件一样用鼠标双击便可执行文件,应该是很有趣的啊。这里我用了一个名字叫做exe4j的免费小软件,感觉不错。 首先,当然是...
  • 一,可移植可执行文件格式(PE Portable Executable) 全称为PE-COFF(Portable Executable and Common Object File Format) 可移植可执行和通用对象文件格式。 主要用于Windows 环境。PE 是 COFF 的改进版。 一个...
  • UNIX/LINUX 平台可执行文件格式分析

    千次阅读 2016-08-01 14:43:53
    UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format ...
  • Python读取sql文件,且可执行

    万次阅读 2019-05-17 17:44:43
    python 直接读取 sql 文件,达到使用 read_sql 可执行的目的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,537,405
精华内容 614,962
关键字:

属于可执行文件类型的是