ELF 文件类型 - ET_EXEC 和 ET_DYN

Tre*_*rey 6 x86 elf

好吧,据我所知ET_EXEC用于表示该文件是可执行文件,而ET_DYN表示该文件是一个共享库。所以可以肯定的是,我用 C 编写了一个简单的程序,但问题是readelf -h产生了以下内容:

ELF Header:
Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
Class:                             ELF64
Data:                              2's complement, little endian
Version:                           1 (current)
OS/ABI:                            UNIX - System V
ABI Version:                       0
Type:                              DYN (Shared object file)
  .
  .
  .
Run Code Online (Sandbox Code Playgroud)

我认为这与我使用的编译器有关,所以我对/bin 中的一些实用程序做了同样的事情,但不幸的是得到了相同的结果。那么问题来了:为什么 readelf 将可执行文件识别为共享库?

Emp*_*ian 5

为什么 readelf 将可执行文件识别为共享库?

因为它(一种特殊的)共享库。另请参阅此答案