我已经将下面的C函数(在sum. c中)编译成了目标代码:
int sum(int a, int b)
{
return (a + b);
}
使用
gcc -c sum.c
当我使用size
检查不同部分的大小时:
size sum.o
text data bss dec hex filename
112 0 0 112 70 sum.o
它告诉我文本部分分配了112个字节,但是当我使用objdump
反汇编它时:
objdump -d sum.o
sum.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <sum>:
0: f3 0f 1e fa endbr64
4: 55 push %rbp
5: 48 89 e5 mov %rsp,%rbp
8: 89 7d fc mov %edi,-0x4(%rbp)
b: 89 75 f8 mov %esi,-0x8(%rbp)
e: 8b 55 fc mov -0x4(%rbp),%edx
11: 8b 45 f8 mov -0x8(%rbp),%eax
14: 01 d0 add %edx,%eax
16: 5d pop %rbp
17: c3 retq
在.text
部分中只有17字节的指令。我是否遗漏了什么?
1条答案
按热度按时间6bc51xsx1#
使用
size -A
和objdump -D
可以获取您想要的所有信息。在我的系统上,
size
不带-A
,它将.eh_frame
部分的大小添加到文本上(可能是因为它是只读的,将与文本一起加载)。