c - 在 main 中获取 __attribute__ ((constructor)) 函数的值

标签 c gcc

我正在尝试创建一个像这样的 before-main 评估:

int evaluate(int argc, char** argv) __attribute__ ((constructor));
int evaluate(int argc, char** argv)
{
    int result = atoi(argv[1]);
    if (result == 0)
        return 1;
    else
        return 0;
}

int main(?????)
{
    if (????? == 0)
        printf("Wrong number.");
    else
        printf("It is 1!");
}

有办法做到这一点吗?我这样做纯粹是为了让自己更熟悉 C、传递命令行参数和使用 pre-main 函数。

最佳答案

这非常依赖于平台。 glibc 动态加载器将 argc、argv 和 envp 传递给 ELF 构造函数,因此您可以通过这种方式访问​​程序参数。据我所知,这是一个未记录的动态加载器功能,因此您可能不应该依赖此行为。

对于检查结果,您必须将其写入全局变量(或将其记录在其他全局数据结构中)。该实现丢弃了

关于c - 在 main 中获取 __attribute__ ((constructor)) 函数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58999228/

相关文章:

linux - 将 GCC 移植到新架构

c - 具有复数的 Neon 内在函数

objective-c - Canon EDSDK 在 Mac OS 10.7.5 上的一个非常基本的程序上因 EXC_BAD_ACCESS 而崩溃

c - 在C中的字符串前后添加一些字母

c - "dynamically loading a library file"和 "specifying .so path in Makefile"之间的区别?

c - swift 3 : Compilation error converting String Array to C Char Array

gcc - ld.exe : unrecognized option '-z'

c - lseek() 在后面跟新的 open() 时返回 0

c - setsid() 什么时候有用,或者为什么我们需要在 Linux 中对进程进行分组?

c++ - 对 'inflateInit2_' 的 undefined reference