“gcc -S”与“objdump -D”不同

时间:2012-12-17 10:48:59

标签: assembly objdump

我写了一小段代码并用gcc -S编译它以查看ASM输出:

...
movl    %esp, %ebp
.cfi_def_cfa_register 5
subl    $16, %esp
movl    $0, -4(%ebp)
...

现在我希望在Linux上调用objdump -D(反汇编)导致一个等效的结构,但它看起来像:

80483b5:   89 e5                   mov    %esp,%ebp
80483b7:   83 ec 10                sub    $0x10,%esp
80483ba:   c7 45 fc 00 00 00 00    movl   $0x0,-0x4(%ebp)

为什么我会mov / sub而不是movl / subl

2 个答案:

答案 0 :(得分:2)

输出是等效的。 b / l /等。在指令结束之前,只是一种告诉读者被操纵数据大小的方法。基础x86架构没有这样的内部区分,因为可以从操作数推断出大小。大小是AT& T语法'idiom'/ sugar,似乎未在gcc工具链和objdump binutils中使用。

答案 1 :(得分:0)

此外,gcc -S的输出已取消链接,因此来自objdump.exe的链接不是可执行文件。