在共享库中调用内部函数

Calling Internal Functions in a Shared Library

我想在 glibc 中调用一个 未导出的 函数。准确的说,我想打电话给ptmalloc_init()。问题是该符号 导出。我可以访问 glibc 源代码。因此,我在 glibc 源代码中添加了一个名为 ptmalloc_init_caller() 的函数并编译了库。但是我再次在 nm -D 输出中看不到任何内容,因此 不能 从外部 调用添加的函数 。关于建筑 glibc 是否有一些 特殊 被遗漏了?

您需要将 ptmalloc_init 函数设为非 static 并将其添加到 malloc/Versions,例如在 GLIBC_PRIVATE 部分下。然后它将被导出。如果不更改 malloc/Versions,该函数将不会在生成的版本脚本中提及(请参阅构建树中的 libc.map),并且其符号将具有隐藏的可见性。