gpt4 book ai didi

c++ - 编译之间 C 函数符号的地址是否常量

转载 作者:行者123 更新时间:2023-11-28 04:30:12 24 4
gpt4 key购买 nike

我一直在我的共享库中试验符号可见性,并注意到导出函数符号的地址/值似乎没有改变。这些地址在编译之间是不变的,还是巧合?

在运行 Arch Linux 的虚拟机上使用带有选项 -W--dyn-syms 的命令 readelf 获得的地址。

我问的原因是我想知道是否可以将模板化 C++ 函数的地址用作对象类型的 uuid。这在我的序列化例程中很有趣,我在其中想设置一个在编译之间保持不变的 id 系统(对象类型在初始化时静态注册,因此未定义顺序)。

最佳答案

如果构建过程不变(即编译器、链接器、Makefile 和代码保持不变),ELF 文件中的static 地址也不会改变。但是,如果任何组件发生变化,所有的赌注都会落空。

更重要的是,由于address-space randomization动态地址(由动态加载程序分配)在每次运行时都会不同。在现代 Linux 发行版中,因此您不应依赖它。

关于c++ - 编译之间 C 函数符号的地址是否常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com