C/C++中函数main()的地址

Address of function main() in C/C++

本文关键字:地址 main 函数 C++      更新时间:2023-10-16

有没有办法在C或C++中找到main()的地址?既然它本身就是一个函数,会有它自己的地址吗?

C

当然。简单地去做吧。

#include <stdio.h>
int main(void)
{
   printf("%pn", &main);
}

C++

不允许使用main的地址,因此,就您的目的而言,没有一个:

[C++11: 3.6.1/3]:程序中不得使用功能主[..]

然而,在GCC中,您可以采用与在C中相同的方法,通过编译器扩展:

#include <iostream>
int main()
{
   std::cout << (void*)&main << 'n';
}

您将收到一条不符合要求的警告。

我不能100%确定这个问题是来自使用C++的程序中,还是用于检索使用C/C++创建的main()函数的地址(意思是来自命令行)。

由于你似乎已经收到了几个关于如何从程序中获取地址的好答案,我想我也可以提到你也可以从nm中获取这些信息。

nm program|grep main

如果任何系统都找不到main的地址。。将对函数foo()的调用作为main中唯一的语句,让main返回它返回的任何内容,并使用foo的地址而不是main。

请注意,即使没有静态/全局变量,调用main也不一定会重新启动代码。编译器在实际调用main之前生成启动代码。

如果您想在调用main之前中断,请编写以下内容:

static int i=foo();

并且在较早的数据初始化步骤期间将调用foo。