在共享库中调用内部函数
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
),并且其符号将具有隐藏的可见性。
我想在 glibc
中调用一个 未导出的 函数。准确的说,我想打电话给ptmalloc_init()
。问题是该符号 未 导出。我可以访问 glibc
源代码。因此,我在 glibc
源代码中添加了一个名为 ptmalloc_init_caller()
的函数并编译了库。但是我再次在 nm -D
输出中看不到任何内容,因此 不能 从外部 调用添加的函数 。关于建筑 glibc
是否有一些 特殊 被遗漏了?
您需要将 ptmalloc_init
函数设为非 static
并将其添加到 malloc/Versions
,例如在 GLIBC_PRIVATE
部分下。然后它将被导出。如果不更改 malloc/Versions
,该函数将不会在生成的版本脚本中提及(请参阅构建树中的 libc.map
),并且其符号将具有隐藏的可见性。