Linux 下“Hello World”的幕后发生了什么(5)
导读:Linux,你会发现,这样我们得到的输出结果与直接使用 cat 读取文件所获得的结果完全一致。 $ cat /usr/bin/python3.9 | hexdump -C | head00000000 7f 45 4c 46 02 01 01 00 00 00 00
Linux
你会发现,这样我们得到的输出结果与直接使用cat读取文件所获得的结果完全一致。
$ cat /usr/bin/python3.9 | hexdump -C | head
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 3e 00 01 00 00 00 c0 a5 5e 00 00 00 00 00 |..>.......^.....|
00000020 40 00 00 00 00 00 00 00 b8 95 53 00 00 00 00 00 |@.........S.....|
00000030 00 00 00 00 40 00 38 00 0b 00 40 00 1e 00 1d 00 |....@.8...@.....|
00000040 06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
00000050 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00 |@.@.....@.@.....|
00000060 68 02 00 00 00 00 00 00 68 02 00 00 00 00 00 00 |h.......h.......|
00000070 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 |................|
00000080 a8 02 00 00 00 00 00 00 a8 02 40 00 00 00 00 00 |..........@.....|
00000090 a8 02 40 00 00 00 00 00 1c 00 00 00 00 00 00 00 |..@.............|
关于魔术数字的额外说明
这个文件以ELF开头,这是一个被称为“魔术数字magic number”的标识符,它是一种字节序列,告诉我们这是一个 ELF 文件。在 Linux 上,ELF 是二进制文件的格式。
不同的文件格式有不同的魔术数字。例如,gzip 的魔数是1f8b。文件开头的魔术数字就是file blah.gz如何识别出它是一个 gzip 文件的方式。
我认为file命令使用了各种启发式方法来确定文件的类型,而其中,魔术数字是一个重要的特征。
7、寻找解释器
我们来解析这个 ELF 文件,看看里面都有什么内容。
自行验证:运行readelf -a /usr/bin/python3.9。我得到的结果是这样的(但是我删减了大量的内容):
$ readelf -a /usr/bin/python3.9
ELF Header:
Class: ELF64
Machine: Advanced Micro Devices X86-64
...
-> Entry point address: 0x5ea5c0
...
Program Headers:
Type Offset VirtAddr PhysAddr
INTERP 0x00000000000002a8 0x00000000004002a8 0x00000000004002a8
0x000000000000001c 0x000000000000001c R 0x1
-> [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
...
-> 1238: 00000000005ea5c0 43 FUNC GLOBAL DEFAULT 13 _start
从这段内容中,我理解到:
-
请求内核运行
/lib64/ld-linux-x86-64.so.2来启动这个程序。这就是所谓的动态链接器,我们将在随后的部分对其进行讨论。 -
该程序制定了一个入口点(位于
0x5ea5c0),那里是这个程序代码开始的地方。
接下来,让我们一起来聊聊动态链接器。
8、动态链接
相关阅读
-
win11字体安装位置详细介绍 windows11字体怎么安装
为网友们详解win11字体安装位置详细介绍方面的知识,关于win11字体安装位置详细介绍 windows11字体怎么安装,下面为详细的介绍。 有一些小伙伴在安装win11字体后,找不到自己的字体安装在哪里
-
win10开机进不了系统怎么办 重装系统不停重启教程
小编为大家说一说win10开机进不了系统怎么办和重装系统不停重启教程的介绍,接下来小编为网友介绍。 在日常使用电脑的过程中,我们有时候会遇到电脑开机后进不了系统的情况,这是令人
-
游戏分辨率怎么调 英雄联盟游戏分辨率怎么调
本文导读:游戏分辨率怎么调的方法内容,关于游戏分辨率怎么调 英雄联盟游戏分辨率怎么调,接下来一起来看看吧。 最近不少的IT袋用户问分辨率是不是越高越好,其实不然,分辨率高并不
-
win10怎么设置屏幕不休眠 win10怎么关闭屏幕不休眠
今天介绍win10怎么设置屏幕不休眠的相关知识,win10设置屏幕不休眠共三步,只需在电脑睡眠设置中进行操作即可。具体步骤如下:


