linux - 加载程序是否在 linux 中执行符号重定位?
问题描述
我认为只有链接器会重新定位符号,这样一旦我们得到一个可执行对象文件(a.out),符号的逻辑地址就不会改变。但是,根据我的实验,情况似乎并非如此:
我写了一个简单的代码:
#include <stdio.h>
int main(void) {
printf("address of main: %p\n", &main);
}
并将其编译为可执行文件 a.out。
每次我运行相同的可执行文件时,都会得到不同的结果,这里有一些示例:
address of main: 0x55bb9c80064a
address of main: 0x55940760064a
所以我想知道这是否意味着加载程序在将程序加载到内存时会进行另一个符号重定位?
我的环境:Ubuntu 18.04.5 LTS + gcc。
解决方案
推荐阅读
- javascript - 在提交时获取 material-ui TextField 值
- android - 我找不到解决方案可以请人
- java - 如何从两个不同的 db.collections 中获取数据并将它们合并到 Kotlin-Firebase 的一个类中?
- javascript - 计算文件夹中具有特定类型的所有文件
- javascript - NextJs 道具样式不匹配
- reactjs - 在 useCallBack() 函数中使用 setInterval() 对 useRef() 进行反应,在 clearInterval() 时未清除
- xcode - 无法在 Xcode 10.1 中编译情节提要
- amp-html - Webp in amp 与 jpg 替代品用于不受支持的浏览器
- android - 如何实现与视频的共享元素过渡
- r - 合并仅包含一个数字的多个文件