gcc 'size'和'objdump'的输出不一致?

llew8vvj  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(169)

我已经将下面的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字节的指令。我是否遗漏了什么?

6bc51xsx

6bc51xsx1#

使用size -Aobjdump -D可以获取您想要的所有信息。
在我的系统上,size不带-A,它将.eh_frame部分的大小添加到文本上(可能是因为它是只读的,将与文本一起加载)。

相关问题