我正在尝试LD_PRELOAD函数,例如mmap
,read
,open
,clone
等等,但有些函数确实成功获得了LD_PRELOADed,其他函数则没有“T。例如,mmap
,read
和open
完全正在预加载但clone
不是预先加载的,而我确信clone
正在从我的程序中调用报告由strace
,因为我正在使用pthreads。 clone
在这里没有LD_PRELOAD的原因是什么?
答案 0 :(得分:1)
strace
显示系统调用; LD_PRELOAD覆盖(C库)函数。这可能表示clone
系统调用由不同的函数调用,而不通过clone
函数符号(例如通过C库内部的内部链接,或直接调用系统调用)。 / p>
实际上,clone
不是Posix库函数;它是一个恰好暴露的Linux实现细节。该手册页说:
clone()和sys_clone调用是特定于Linux的,不应在可移植的程序中使用。
相反,你应该LD_PRELOAD覆盖pthread_create
等;在其他平台上,它们可以在没有clone
的情况下实现。