如何在C编程中找到函数的结束地址?

vij*_*231 5 c

起始地址可以从函数名中获取,如何查找函数的结束地址?我在采访中被问到这个问题:

考虑我写的函数f()已越过文本部分并开始编写相邻部分(数据部分).我该如何处理这种情况?他还补充说我应该通过C代码处理它.我不应该看到符号映射文件并获取地址.

ugo*_*ren 6

使用GCC,您可以使用&&操作员获取标签的地址(是 - &&&).
这可以使用如下:

void f(void) {
    printf("Start %p End %p\n", f, &&f_end);
    f_end: return;
}
Run Code Online (Sandbox Code Playgroud)

这不会给你完全结束,因为标签后面有一些结尾代码,但我认为这对于面试答案来说已经足够了.


unw*_*ind 1

您不能使用语言本身,C 没有公开函数“大小”的概念。

您可以做的是检查程序的二进制文件,并解析符号表等。