[C0如何确定在后处理期间每个加载的图像(例如,共享库)的加载地址。例如,perf
使用此信息来使每个符号地址相对于每个已加载图像的开头。如下图(perf report
)所示:unwind: _int_malloc...
仅通过查看ELF可执行文件和库就无法找到它。每次运行可能会有所不同;即使像GDB一样通过性能禁用了ASLR,程序也可能在使用某些后来才加载的可选库的perf.data
之前使用mmap(MAP_FIXED)
,因此dlopen不得不选择与平时不同的地址来映射库。 (正常的动态链接发生在dlopen
运行之前,而不是通过dlopen运行,但大概main
希望能够记录地址->任何文件支持的映射的文件映射。)
可能是perf将每个ELF对象的运行时基址保存在perf
中