【问题标题】:What does libc_hidden_proto in the glibc standard libraries do?glibc 标准库中的 libc_hidden_​​proto 是做什么的?
【发布时间】:2016-05-18 04:18:41
【问题描述】:

我试图在unistd.h 中查找getpgrp() 函数的原型,但找不到。该文件中唯一包含 getpgrp 的行是 libc_hidden_proto (tcgetpgrp) 行,我假设这是一个宏,但我不知道它的作用。

我用谷歌搜索,但在网上找不到任何关于 libc_hidden_proto 实际作用的解释。任何关于该宏在 glibc 中的用途的解释都将不胜感激。

【问题讨论】:

  • 您使用的是什么版本的 glibc?我在任何地方都没有libc_hidden_proto,但我确实记得从前...
  • 这很奇怪。我正在使用 glibc 2.19,但我也在查看 glibc 2.18、2.20、2.21 和 2.23 中的 unistd.h 头文件,我在所有这些版本中都看到了 libc_hidden_​​proto。

标签: c glibc unistd.h


【解决方案1】:

您不小心查看了 internal 副本 (include/unistd.h) 而不是公共副本 (posix/unistd.h)。不,我也不明白 glibc 的源代码是如何组织的。

来自include/libc-symbols.h

   The following macros are used for PLT bypassing within libc.so
   (and if needed other libraries similarly).
   First of all, you need to have the function prototyped somewhere,
   say in foo/foo.h:
   int foo (int __bar);
   If calls to foo within libc.so should always go to foo defined in libc.so,
   then in include/foo.h you add:
   libc_hidden_proto (foo)

【讨论】:

  • 谢谢。我实际上已经阅读了 libc-symbols.h 中的内容,但我不明白 PLT 是什么,所以我没有在我的问题中提到 libc-symbols。但是无论如何+1为您的答案。现在我要去阅读有关 PLT、GOT、ELF 文件、链接器、动态加载以及其他数百万我不知道的其他内容的信息:P
  • @jerry 基本上,就像-fsemantic-interposition 对于那些符号。由于 glibc 所做的所有其他疯狂的事情,它只能在 glibc 中工作。
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2017-06-23
  • 1970-01-01
  • 2011-06-28
相关资源
最近更新 更多