我已经使用C了很短的时间,最近才开始涉足ASM。当我编译程序时:
int main(void)
{
int a = 0;
a += 1;
return 0;
}
objdump反汇编具有代码,但在重新输入后会提示:
...
08048394 <main>:
8048394: 55 push %ebp
8048395: 89 e5 mov %esp,%ebp
8048397: 83 ec 10 sub $0x10,%esp
804839a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
80483a1: 83 45 fc 01 addl $0x1,-0x4(%ebp)
80483a5: b8 00 00 00 00 mov $0x0,%eax
80483aa: c9 leave
80483ab: c3 ret
80483ac: 90 nop
80483ad: 90 nop
80483ae: 90 nop
80483af: 90 nop
...
从我学到的知识,nops什么都不做,因为ret后甚至不会被执行。
我的问题是:为什么要打扰?ELF(linux-x86)不能使用任何大小的.text部分(+ main)吗?
我将不胜感激,只是尝试学习。
80483af
,则可能需要填充,以将下一个函数对齐为8或16个字节。