Linux 可执行文件格式。规范在哪里?

我想了解 Linux 可执行文件是如何组成的。我在哪里可以获得规范?

我用 gcc 编译了一个简单的汇编文件,但生成的文件大小比我预期的要大得多。

# cat tmp.s
.intel_syntax noprefix
.global main
main:
        mov rax, 42
        ret
# gcc -o tmp tmp.s
# ./tmp
# echo $?
42

# ls -l tmp
-rwxr-xr-x 1 root root 8136 Jul 31 04:03 tmp

# xxd tmp
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
00000010: 0300 3e00 0100 0000 f004 0000 0000 0000  ..>.............
...
...
00001fb0: 0000 0000 0000 0000 0100 0000 0000 0000  ................
00001fc0: 0000 0000 0000 0000                      ........

# uname -a
Linux fb8275f9e7a0 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

# gcc --version
gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
彼得·科德斯

file tmp会告诉你这是一个ELF 可执行文件请参阅https://stackoverflow.com/tags/elf/info,然后尝试readelf -a tmp

回复:文件大小:https : //www.muppetlabs.com/~breadbox/software/tiny/teensy.html

此外,当前的工具链将部分与页面边界对齐,使它们比必要的更大。链接以ld --nmagic完全禁用节对齐(可能会破坏编译器生成的代码)。还禁用与共享库的链接。无论如何,这就是为什么您的可执行文件在大部分填充时仅超过 2x 4kiB 的原因。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Linux中Ruby可执行文件和gem.bat的路径在哪里?

来自分类Dev

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

来自分类Dev

如何在Linux中使用模式执行多个可执行文件

来自分类Dev

可执行文件的指令在哪里?

来自分类Dev

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

来自分类Dev

在QtCreator上生成Linux可执行文件

来自分类Dev

Homebrew在哪里安装Postgres可执行文件?

来自分类Dev

执行(Linux)。内部如何运作?Linux可执行文件属性(rlimit)

来自分类Dev

Ubuntu上的PHP可执行文件在哪里?

来自分类Dev

为Linux可执行文件创建命令

来自分类Dev

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

来自分类Dev

在Linux中的可执行文件上

来自分类Dev

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

来自分类Dev

Linux中Ruby可执行文件和gem.bat的路径在哪里?

来自分类Dev

“ START”在哪里搜索可执行文件?

来自分类Dev

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

来自分类Dev

将可执行文件从Linux传输到Mac

来自分类Dev

本地可执行文件应放在哪里?

来自分类Dev

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

来自分类Dev

在Ubuntu Linux 16.04桌面上运行的C#可执行文件在哪里使用DLLImport共享对象在运行时寻找它们的源代码?

来自分类Dev

可执行文件无法正常运行[Linux]

来自分类Dev

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

来自分类Dev

Linux / bash无法执行“哪个”告诉我的可执行文件

来自分类Dev

Emacs:可执行文件在哪里更好?

来自分类Dev

如何在Linux中使用模式执行多个可执行文件

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

    Linux中Ruby可执行文件和gem.bat的路径在哪里?

  5. 5

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

  6. 6

    如何在Linux中使用模式执行多个可执行文件

  7. 7

    可执行文件的指令在哪里?

  8. 8

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

  9. 9

    在QtCreator上生成Linux可执行文件

  10. 10

    Homebrew在哪里安装Postgres可执行文件?

  11. 11

    执行(Linux)。内部如何运作?Linux可执行文件属性(rlimit)

  12. 12

    Ubuntu上的PHP可执行文件在哪里?

  13. 13

    为Linux可执行文件创建命令

  14. 14

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

  15. 15

    在Linux中的可执行文件上

  16. 16

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

  17. 17

    Linux中Ruby可执行文件和gem.bat的路径在哪里?

  18. 18

    “ START”在哪里搜索可执行文件?

  19. 19

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

  20. 20

    将可执行文件从Linux传输到Mac

  21. 21

    本地可执行文件应放在哪里?

  22. 22

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

  23. 23

    在Ubuntu Linux 16.04桌面上运行的C#可执行文件在哪里使用DLLImport共享对象在运行时寻找它们的源代码?

  24. 24

    可执行文件无法正常运行[Linux]

  25. 25

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

  26. 26

    Linux / bash无法执行“哪个”告诉我的可执行文件

  27. 27

    Emacs:可执行文件在哪里更好?

  28. 28

    如何在Linux中使用模式执行多个可执行文件

  29. 29

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

热门标签

归档