/sbin/init 是共享对象吗?

/sbin/init 是共享对象吗?

我知道“init”是加载内核后启动的第一个进程,但对我来说有一个歧义。如果它是一个进程,它必须有一个二进制可执行文件。然而,下面的共享对象是编译后的代码,看起来像可执行文件,但没有 main 函数。

sardari@mint / $ file /sbin/init
/sbin/init: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=7a4c688d009fc1f06ffc692f5f42ab09e68582b2, stripped

显然共享对象可以是可执行文件,但为什么呢?

答案1

当使用-pie(位置独立的可执行文件) 例如 :

gcc -pie -fPIC hello.c

然后你有:

#file ./a.out 
a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x2afb7892000a1dc5b9010c591b75987188aa2d66, stripped

如果您需要更多信息,您可以访问与位置无关的代码

相关内容