有没有办法在C或C ++中找到 main()的地址? 既然它本身就是一个函数,它会有自己的地址吗?
答案 0 :(得分:13)
不确定。只需继续做下去。
#include <stdio.h>
int main(void)
{
printf("%p\n", &main);
}
不允许带main
的地址,因此,为了您的目的,没有一个地址:
[C++11: 3.6.1/3]:
函数main不得在程序中使用。 [..]
但是,在GCC中,您可以采用与C相同的方法,通过编译器扩展:
#include <iostream>
int main()
{
std::cout << (void*)&main << '\n';
}
您将收到不符合规定的警告。
答案 1 :(得分:4)
我不能100%确定问题是来自使用C / ++的程序,还是检索用C / C ++创建的main()
函数的地址(意思是从命令行) 。
由于您似乎已经收到了关于如何从程序中获取地址的几个好答案,我想我也提到您也可以从nm
获取此信息。< / p>
nm program|grep main
答案 2 :(得分:0)
如果对于任何系统你都找不到main的地址..把一个函数调用foo()作为main中的唯一语句,主要返回它返回的内容并使用foo而不是main的地址。
请注意,即使没有静态/全局变量,调用main也不一定会重新启动代码。编译器在实际调用main之前生成启动代码。
如果你想在这次调用main之前断点,请写下:
static int i=foo();
在早期的数据初始化步骤中将调用和foo。