【发布时间】:2019-04-07 22:31:42
【问题描述】:
我一直在我的共享库中试验符号可见性,并注意到导出函数符号的地址/值似乎没有改变。这些地址在编译之间是不变的,还是巧合?
在运行 Arch Linux 的虚拟机上使用命令 readelf 和选项 -W 和 --dyn-syms 获得的地址。
我问的原因是 我想知道模板化 C++ 函数的地址是否可以用作对象类型的 uuid。 这对我的序列化例程很感兴趣想设置一个在编译之间保持不变的 id 系统(对象类型在初始化时静态注册,因此没有定义顺序)。
【问题讨论】:
-
同一二进制文件的两次运行之间甚至可能不一样:en.wikipedia.org/wiki/Address_space_layout_randomization
-
"是编译之间的 C 函数符号常量的地址" - 不,你没有这样的保证。
标签: c++ c serialization dll shared-libraries