在Linux中的可执行文件上

用户名

这是,在linux下,与Windows,有没有可执行文件和其他文件之间有明确的交界。

好吧,在Windows中,我编写了一个C ++程序,然后对其进行了预编译,编译,然后链接成一个独特的文件:可执行文件。变化是如此之大,以至于它们是不可逆的。

但是在Linux中,将执行一个包含代码的简单文本文件。那么编译和链接有什么作用?如果执行了代码,为什么要编译?在此过程中有什么好处,代码与Linux中最终的(所谓的)可执行文件之间的主要区别是什么?为什么程序的可移植性在Linux中受到限制,并且如果它们是代码,则需要很多(特定于版本的)依赖性要求?

奋斗

tl; dr:区别在于可执行位。

答案在于UNIX权限模型。老实说,我忘记了Windows权限模型是什么,但是在UNIX(以及GNU / Linux)中,可以在文件上设置三个主要的权限位:读取,写入和执行。这些位可以在任何对象上设置您想要设置可执行位的文件有两种主要类型:

  1. 二进制文件
  2. 剧本

第一种类型.exe与Windows中的完全一样唯一的区别是文件的执行能力由文件系统中的权限位而不是文件扩展名决定。二进制仍然具有与.exes相同的格式在GNU / Linux上,此格式称为ELFLinux内核具有特殊的逻辑,该逻辑告诉它如何读取ELF二进制文件的格式。当您执行二进制文件时,正是这种逻辑实际在运行代码。

使您感到困惑的部分是可执行文件的第二种类型:脚本。脚本是常规的文本文件,可由解释器(例如python或)执行bash脚本以“ shebang”开头,如下所示:#!当“执行”脚本时,内核会识别出shebang并执行其后指定的任何二进制文件,并将您正在执行的脚本的路径作为参数。

例如,假设我有一个脚本,该脚本的path处设置了可执行位/home/alex/bin/test_script该脚本的第一行内容如下:

#!/bin/bash

当您执行此脚本时,内核将在开始时识别出shebang。然后它将加载/bin/bash/home/alex/bin/test_script作为第一个参数传递这等效于在命令行上执行以下操作:

/bin/bash /home/alex/bin/test_script

以这种方式,bash被加载来解释或“执行”脚本。

顺便说一句,从源到二进制的更改并不是很大,以至于无法撤消。从二进制文件中检索源代码称为反编译

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在QtCreator上生成Linux可执行文件

来自分类Dev

在多个组件上应用Linux可执行文件

来自分类Dev

使可执行文件在Linux中运行而无提示

来自分类Dev

从linux可执行文件中调用函数

来自分类Dev

如何在Linux上的/ proc / self / maps中检测可执行文件或共享对象

来自分类Dev

可执行符号链接到Linux中的非可执行文件的可能性?

来自分类Dev

Linux上的C ++,确认库中的代码未静态链接到生成的可执行文件中

来自分类Dev

在标有执行权限的 NTFS 分区上运行 Linux 可执行文件

来自分类Dev

可执行文件上的 Python 文件提取器

来自分类Dev

在Linux中从可执行文件到机器代码的二进制执行步骤

来自分类Dev

是否有标准的虚拟可执行文件,在Linux中不执行任何操作?

来自分类Dev

是否可以在Linux上为Mac创建可执行文件?

来自分类Dev

如何生成可以在Unix和Linux上运行的可执行文件?

来自分类Dev

ARM Linux可执行文件神秘地在x86_64上运行

来自分类Dev

尝试在Linux / Ubuntu上使用oracle库构建静态CGO可执行文件

来自分类Dev

如何在Linux上安全地运行不受信任的可执行文件?

来自分类Dev

将可执行文件移植到另一台Linux机器上

来自分类Dev

在Linux(OpenCV 3.0.0-alpha)上构建opencv_contrib示例可执行文件

来自分类Dev

获取有关Linux系统上Windows可执行文件的信息

来自分类Dev

是否可以在基于yum或rpm的Linux上编译可移植可执行文件?

来自分类Dev

Linux命令“哪个”未在Ubuntu下的NFS路径上找到可执行文件

来自分类Dev

C ++ Linux在部署环境上安装可执行文件

来自分类Dev

尝试在Linux系统上运行可执行文件时出错

来自分类Dev

在 Windows 上制作 python 独立的 Linux 可执行文件

来自分类Dev

如何仅在Linux中复制可执行文件(或不带扩展名的文件)?

来自分类Dev

如何从其他文件夹中存储的C ++运行linux可执行文件

来自分类Dev

如何从可执行文件上的2个文件中接收输入

来自分类Dev

Linux:可执行文件找不到共享库

来自分类Dev

a.out linux可执行文件是哪个程序?

Related 相关文章

  1. 1

    在QtCreator上生成Linux可执行文件

  2. 2

    在多个组件上应用Linux可执行文件

  3. 3

    使可执行文件在Linux中运行而无提示

  4. 4

    从linux可执行文件中调用函数

  5. 5

    如何在Linux上的/ proc / self / maps中检测可执行文件或共享对象

  6. 6

    可执行符号链接到Linux中的非可执行文件的可能性?

  7. 7

    Linux上的C ++,确认库中的代码未静态链接到生成的可执行文件中

  8. 8

    在标有执行权限的 NTFS 分区上运行 Linux 可执行文件

  9. 9

    可执行文件上的 Python 文件提取器

  10. 10

    在Linux中从可执行文件到机器代码的二进制执行步骤

  11. 11

    是否有标准的虚拟可执行文件,在Linux中不执行任何操作?

  12. 12

    是否可以在Linux上为Mac创建可执行文件?

  13. 13

    如何生成可以在Unix和Linux上运行的可执行文件?

  14. 14

    ARM Linux可执行文件神秘地在x86_64上运行

  15. 15

    尝试在Linux / Ubuntu上使用oracle库构建静态CGO可执行文件

  16. 16

    如何在Linux上安全地运行不受信任的可执行文件?

  17. 17

    将可执行文件移植到另一台Linux机器上

  18. 18

    在Linux(OpenCV 3.0.0-alpha)上构建opencv_contrib示例可执行文件

  19. 19

    获取有关Linux系统上Windows可执行文件的信息

  20. 20

    是否可以在基于yum或rpm的Linux上编译可移植可执行文件?

  21. 21

    Linux命令“哪个”未在Ubuntu下的NFS路径上找到可执行文件

  22. 22

    C ++ Linux在部署环境上安装可执行文件

  23. 23

    尝试在Linux系统上运行可执行文件时出错

  24. 24

    在 Windows 上制作 python 独立的 Linux 可执行文件

  25. 25

    如何仅在Linux中复制可执行文件(或不带扩展名的文件)?

  26. 26

    如何从其他文件夹中存储的C ++运行linux可执行文件

  27. 27

    如何从可执行文件上的2个文件中接收输入

  28. 28

    Linux:可执行文件找不到共享库

  29. 29

    a.out linux可执行文件是哪个程序?

热门标签

归档