为什么在不同机器上编译不同的程序entry point都是一样的?
来源:1-4 Go 程序是怎么跑起来的
拧壶冲
2021-05-24 10:58:11
曹大老师,在使用`readelf`的时候有一个疑惑,就是无论编译上面程序,他们的`readelf` 查看的entry point address为什么都一样?而且居然在不同的机器上,居然也都是`0x455780`。
为什么entry point都是一样的呢?这是virtual memory management的原因吗?但是我想不同的机器上内存使用情况都不一样吧。`0x455780`是不是有什么特定含义或者用途?
1回答
Xargin
2021-05-24
地址都一样大概有下面一些方面的原因:
reproducible builds 是编译里的一个概念,就是说只要我们的源代码相同,平台一致(如,都是 linux amd64),Go 版本一致,那么编译出来的二进制文件也应该是完全一致的,这个概念你可以看看https://en.wikipedia.org/wiki/Reproducible_builds
从源代码到二进制,中间要经过 编译-> 链接两个过程,链接过程给文件内的符号分配的都是虚拟地址,二进制文件完全一致的情况下,虚拟地址也应该是一致的。
相似问题
回答 1
回答 1