2012-12-17 48 views
0

我寫了一小塊的代碼和編譯它gcc -S看到ASM輸出的區別:「GCC -S」,從「objdump的-D」

... 
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

輸出是等效的。 b/l /等。指令末尾附加的內容只是一種告訴讀者被操縱數據大小的方法。底層x86架構沒有這樣的內部區別,因爲可以從操作數推斷大小。尺寸是AT & T語法「成語」/糖,似乎沒有一直在使用gcc工具鏈和objdumpbinutils一致使用。

0

另外,gcc -S的輸出未鏈接,因此不可執行,而objdump.exe已鏈接。

相關問題