Linux readelf如何计算函数大小
我试图理解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,用于指定它们的大
#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
,用于指定它们的大小(请参见
):
该属性由生成二进制文件的工具链生成;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