【发布时间】:2012-06-25 14:50:51
【问题描述】:
我正在尝试 LD_PRELOAD linux 的 clone 函数。在我的 LD_PRELOADed 版本中,我需要在调用原始 clone 函数之前记录输入参数。但是,问题在于 clone 采用可变数量的参数。它是这样声明的。
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...
/* pid_t *pid, struct user_desc *tls, pid_t *ctid */ );
现在要将这些参数传递给原始 clone 函数,我必须知道传入的参数数量。我该怎么做?
【问题讨论】:
-
你还碰巧有那个 LD_PRELOAD 代码(或者至少有一些骨架)吗?因为我试图做同样的事情并且也被 clone() varags 卡住了。根据 va_* 的实现,重新考虑接受的答案,我认为它只会吃掉堆栈上的(随机)数据。调用者必须始终告诉被调用者要使用多少(参数数量、终止符、格式字符串或……)。
标签: c linux gcc x86-64 variadic-functions