2

我正在尝试 LD_PRELOAD 函数,例如mmap, read, open,clone等等...,但是虽然某些函数确实成功地获得了 LD_PRELOADed,但其他函数却没有。例如mmapread并且open完全被预加载但clone不是,虽然我肯定知道clone是从我的程序中调用的strace,因为我使用的是 pthreads。clone这里没有被 LD_PRELOADed的原因是什么?

4

1 回答 1

1

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

确实,clone不是 Posix 库函数;这是一个碰巧暴露的 Linux 实现细节。手册页说:

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

相反,您应该 LD_PRELOAD-overridepthread_create等;在其他平台上,它们可以在没有clone.

于 2012-06-25T16:07:34.007 回答