为什么使用 GOT 引用共享对象中定义的非静态全局变量?

发布于 2024-10-15 06:23:26 字数 118 浏览 8 评论 0原文

我的意思是在模块中定义的非静态全局变量,而不是在外部。

为什么一定要通过GOT引用呢?为什么不使用相对地址?(因为.data部分中的全局变量和.text部分中的引用之间的距离是一个常量,它也是与位置无关的)

I mean nonstatic global variables that are defined in the module, not externally.

Why does it have to be referenced through GOT? Why no use relative address?(since the distance between the global variable in the .data section and the reference in the .text section is a constant, it's also position-independent)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我们的影子 2024-10-22 06:23:26

由于您的变量不是静态,因此在 ELF 上可以插入它(想想 LD_PRELOAD)。

Since your variable isn't static, on ELF it can be interposed (think of LD_PRELOAD).

辞慾 2024-10-22 06:23:26

我也有同样的困惑。
如果两个 DSO 中都定义了一个同名的全局变量,并且它们动态链接到一个可执行文件中,那么两个库是否会访问该变量的同一副本?
变量定位到哪个库(库的数据部分)取决于库加载的顺序?

I also have the same confusion.
If there is one global variable with same name defined in both two DSOs and they are dynamically linked into one executable, will both libraries access the same copy of the variable?
And which library(library's data section) the variable locates depends on the order of libraries loading?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文