LD_PRELOAD没有预加载所有符号

时间:2012-06-25 15:43:21

标签: c linux gcc ld-preload

我正在尝试LD_PRELOAD函数,例如mmapreadopenclone等等,但有些函数确实成功获得了LD_PRELOADed,其他函数则没有“T。例如,mmapreadopen完全正在预加载但clone不是预先加载的,而我确信clone正在从我的程序中调用报告由strace,因为我正在使用pthreads。 clone在这里没有LD_PRELOAD的原因是什么?

1 个答案:

答案 0 :(得分:1)

strace显示系统调用; LD_PRELOAD覆盖(C库)函数。这可能表示clone系统调用由不同的函数调用,而不通过clone函数符号(例如通过C库内部的内部链接,或直接调用系统调用)。 / p>

实际上,clone不是Posix库函数;它是一个恰好暴露的Linux实现细节。该手册页说:

  

clone()和sys_clone调用是特定于Linux的,不应在可移植的程序中使用。

相反,你应该LD_PRELOAD覆盖pthread_create等;在其他平台上,它们可以在没有clone的情况下实现。