Linux readelf如何计算函数大小

Linux readelf如何计算函数大小,linux,readelf,Linux,Readelf,我试图理解readelf实用程序是如何计算函数大小的。我写了一个简单的程序 #include <stdio.h> int main() { printf("Test!\n"); } 现在如果我检查主函数的大小,它显示16。它是怎么做到的?这是堆栈大小吗 编译器使用gcc版本4.8.5(Ubuntu 4.8.5-2ubuntu1~14.04.1) GNU readelf(用于Ubuntu的GNU Binutils)2.24ELF符号有一个属性st_size,用于指定它们的大

我试图理解readelf实用程序是如何计算函数大小的。我写了一个简单的程序

#include <stdio.h>

int main() {
    printf("Test!\n");
}
现在如果我检查主函数的大小,它显示16。它是怎么做到的?这是堆栈大小吗

编译器使用gcc版本4.8.5(Ubuntu 4.8.5-2ubuntu1~14.04.1)


GNU readelf(用于Ubuntu的GNU Binutils)2.24

ELF符号有一个属性
st_size
,用于指定它们的大小(请参见
):

该属性由生成二进制文件的工具链生成;e、 g.查看C编译器生成的汇编代码时:

gcc -c -S test.c
cat test.s
你会看到类似的东西

        .globl  main
        .type   main, @function
main:
        ...
.LFE0:
        .size   main, .-main
其中
.size
是一个特殊的伪操作

更新:
.size
是代码的大小


在这里,
.size
被分配
的结果-main
,其中“
”是实际地址,
main
main()
开始的地址。

很抱歉回答太晚,但您所指的大小字段解释了问题的第一部分。关于第二部分,关于它如何达到函数大小的16字节,有什么想法吗?
gcc -c -S test.c
cat test.s
        .globl  main
        .type   main, @function
main:
        ...
.LFE0:
        .size   main, .-main