x86 - ELF 文件类型 - ET_EXEC 和 ET_DYN

标签 x86 elf

这个问题在这里已经有了答案:





Why does GCC create a shared object instead of an executable binary according to file?

(2 个回答)


3年前关闭。




好的,据我所知 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)
  .
  .
  .

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

最佳答案

Why is readelf identifying executables as shared libraries?



因为它是(一种特殊的)共享库。另见 this answer .

关于x86 - ELF 文件类型 - ET_EXEC 和 ET_DYN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50303305/

相关文章:

自定义内核不读取全局变量和 char*

assembly - 为什么 x86 跳转/调用指令使用相对位移而不是绝对目的地?

assembly - 由 nasm 插入的冗余 DS 段覆盖前缀?

linux - Linux AMD64 中的 fs/gs 寄存器如何使用?

assembly - 工作 FAT16 引导加载程序在实际硬件上生成读取错误?

c - 如何找到 PIE 二进制文件的加载重定位?

c - `dlopen` 从同一 DSO 内部访问 DSO

elf - dylib 文件的含义是什么?

c - 如何将 ELF 可执行文件转换为 C 代码?生成的 C 代码不需要是人类可读的

c++ - gcc 链接器 - .obj 转储具有混合源程序集,但在 .elf 中链接时则不然