可执行文件与共享对象

塞尔吉(Sergiy Kolodyazhnyy)

我在做某事时注意到了一些事情find /bin -exec file {} \;

file命令报告的某些条目中/binshared objects,而其他的executables例如,

/ bin / ntfsck:
ELF 64位LSB共享对象,x86-64,版本1(SYSV),
动态链接(使用共享库),用于GNU / Linux 2.6.24,BuildID [sha1] = 312d93fd0d8653e7236a61db2e67b93c63225a00,已剥离

相同的报告 gawk

/ usr / bin / gawk:
ELF 64位LSB共享对象,x86-64,版本1(SYSV),
动态链接(使用共享库),用于GNU / Linux 2.6.24,
BuildID [sha1] = 76bb13aac7e212164bd6e0d7b8a5d92db44543c9,已剥离

与此相反file/bin/echo是:

/ bin / echo:
ELF 64位LSB可执行文件,x86-64,版本1(SYSV),
动态链接(使用共享库),用于GNU / Linux 2.6.24,
BuildID [sha1] = 193e75fc13e9c4599e772b8d79125a5934cf601c,已剥离

本质上,我想知道executable文件和shared object文件之间的区别

科斯

Tl;博士

除了已编译的可执行文件可能链接到共享对象而不链接到可执行文件这一事实外,没有任何区别。


通常,有两种方法可编译1可执行文件:

  • 使用静态链接:编译源代码中包含的外部库,并将编译后的库(或链接器角度的对象)添加到可执行文件本身;
  • 使用动态链接:编译包含在源代码中的外部库,但是将指向已编译库(或链接器角度的对象)的链接添加到可执行文件中(如果运行,则链接器会在运行时加载已编译的库/对象)需要);

使用这些方法中的每一个都有优点/缺点,但这不是问题的重点。

  • /bin/ntfsck并且/usr/bin/gawk是共享对象:这意味着可执行文件可以被编译,然后链接到它们以使用其功能;
  • /bin/echo是可执行文件:这意味着可能不会编译可执行文件,然后将其链接以使用其功能;

因此/bin/ntfsck/usr/bin/gawk它们都是技术上经过编译的库(或链接程序角度的对象),但是,正如人们可能已经预见到的那样,没有什么可以阻止共享对象作为可执行文件运行。

另外,请注意file报告(针对每个报告):

动态链接(使用共享库)

这意味着它们每个都动态链接到(也可能使用)其他共享对象。


1.“编译”旨在获得更广泛的接受,包括预处理,编译和链接。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可执行文件与共享对象

来自分类Dev

链接可执行文件与共享库时,为什么GNU ld解析符号的方式不同?

来自分类Dev

GNU libc.so如何既是共享对象又是独立可执行文件?

来自分类Dev

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

来自分类Dev

可执行文件在运行时在哪里寻找共享对象?

来自分类Dev

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

来自分类Dev

如何帮助可执行文件找到共享库?

来自分类Dev

更改Linux可执行文件的特定共享库

来自分类Dev

代码对象和可执行文件之间的区别

来自分类Dev

“ LSB可执行文件”(ET_EXEC)和“ LSB共享对象”(ET_DYN)有什么区别?

来自分类Dev

哪个文件是可执行文件

来自分类Dev

链接可执行文件中的共享库与另一个共享库

来自分类Dev

ELF可执行文件

来自分类Dev

运行可执行文件的语法?

来自分类Dev

无法加载可执行文件

来自分类Dev

包含数据的可执行文件

来自分类Dev

带可执行文件的RPMbuild

来自分类Dev

Git:使用可执行文件

来自分类Dev

Gitignore可执行文件

来自分类Dev

如何安装可执行文件

来自分类Dev

如何查找可执行文件

来自分类Dev

运行可执行文件

来自分类Dev

扫描Java可执行文件

来自分类Dev

可执行文件的路径

来自分类Dev

找不到可执行文件

来自分类Dev

qmake不是可执行文件

来自分类Dev

奇怪的cygwin可执行文件

来自分类Dev

编译可执行文件

来自分类Dev

simscript可执行文件丢失