gnu库C中的libc_hidden_proto宏

gnu库C中的libc_hidden_proto宏,c,macros,glibc,C,Macros,Glibc,在gnu库C源代码中,人们可以看到一些函数原型后面跟着libc_hidden_proto宏,它们是用来做什么的 是用来做什么的 它记录在inlcude/libc symbols.h中: /*以下宏用于libc.so内的PLT旁路 (如果需要,也可以使用其他类似的库)。 首先,你需要在某处将函数原型化, 用foo/foo.h说: int foo(int_uuuuubar); 如果libc.so中对foo的调用应始终转到libc.so中定义的foo, 然后在include/foo.h中添加: lib

在gnu库C源代码中,人们可以看到一些函数原型后面跟着
libc_hidden_proto
宏,它们是用来做什么的

是用来做什么的

它记录在
inlcude/libc symbols.h
中:

/*以下宏用于libc.so内的PLT旁路
(如果需要,也可以使用其他类似的库)。
首先,你需要在某处将函数原型化,
用foo/foo.h说:
int foo(int_uuuuubar);
如果libc.so中对foo的调用应始终转到libc.so中定义的foo,
然后在include/foo.h中添加:
libc_hidden_proto(foo)
行和foo函数定义之后:
int foo(int____________________)
{
返回条;
}
libc_隐藏_def(foo)
或
int foo(int____________________)
{
返回条;
}
libc_隐藏_弱(foo)

换句话说,这允许GLIBC调用
libc.so.6
中定义的
\uu mmap
,即使您
LD\u预加载了其他定义了自己的
\uu mmap

的库,谢谢您的回答,现在我有另一个问题,他们是否通过重命名函数来实现这个技巧,我遵循这些定义,发现它们实际上是在重命名函数,它们将函数与宏用户\u LABEL\u前缀的扩展连接起来,并_GI@masalkhi“我还有一个问题……”——你应该接受这个答案,然后单独问另一个问题(提问是免费的;-)