属性构造函数样式函数的参数

时间:2015-11-28 17:57:59

标签: c gcc llvm-clang

我见过这样的代码:(基于Apple的代码)

__attribute__((constructor))
void do_action(int argc, const char **argv, const char **envp, const char **things, struct ProgramVars *)
{
   //
}

这很奇怪,因为我读到构造函数样式函数应该是无效的。这些参数来自何处,我可以选择这些参数吗?对于gcc / clang来说这只是苹果吗?

此代码应与DYLD_INSERT_LIBRARIES一起使用,(Linux' LD_PRELOAD)。 这是为什么它得到参数的特殊原因吗?

1 个答案:

答案 0 :(得分:3)

属性lvalue的函数可以与constructor具有相同的参数。它们可能不同。 LD_PRELOAD没有什么共同之处。此功能主要基于glibc库(不了解其他人),并且对于使用glibc和支持构造函数属性的所有编译器都是可接受的。在Linux上它工作正常。

查看代码中的函数main

do_action

它放在路径* csu / elf-init.c

中的glibc库中

我也认为,您的论证for (size_t i = 0; i < size; i++) (*__init_array_start [i]) (argc, argv, envp); 无法分配,只能struct ProgramVars *