gpt4 book ai didi

c - 强制 ld 在 ld 时间解析弱引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:59 29 4
gpt4 key购买 nike

考虑这样一个程序:

#include <stdio.h>
void foo() __attribute__((__weak__));
int main()
{
printf("%p\n", (void *)foo);
if (foo) foo();
}

如果编译为常规的非 PIE 动态链接可执行文件,foo 的不存在将在 ld 时解决,即使 LD_PRELOAD 是用来定义foo的,不会被看到。另一方面,如果程序编译为 PIE,弱动态符号引用最终会出现在输出中,LD_PRELOAD 可以使符号 foo 可见。

有没有办法强制 PIE 可执行文件的非 PIE 行为(在 ld 时解决弱引用符号的不存在,而不是在运行时)?

最佳答案

具有此属性的函数将其名称作为弱函数发出符号而不是全局名称。这主要是为了命名可以被用户代码覆盖的库例程。

弱符号拥有两个或多个同名全局符号不会引起冲突,只要其中一个符号被声明为弱符号即可。链接器忽略弱符号的定义并使用普通全局符号定义来解析所有引用,但如果普通全局符号不可用,将使用弱符号。弱符号可用于命名可被用户代码覆盖的函数和数据。弱符号也称为弱别名,或简称为弱。

来自互联网!

关于c - 强制 ld 在 ld 时间解析弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25679030/

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