1

小さなコードを書き、それをコンパイルしてgcc -S、ASMの出力を確認しました。

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

objdump -DLinuxでは、 (逆アセンブル)を呼び出すと同等の構造になると思いますが、次のようになります。

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ですか?

4

2 に答える 2

2

出力は同等です。// betc l。命令の最後に付加されるのは、操作されているデータのサイズをリーダーに伝えるための単なる方法です。基になるx86アーキテクチャでは、オペランドからサイズを推測できるため、このような内部的な区別はありません。gccサイズはAT&T構文の「イディオム」/砂糖であり、ツールチェーン全体およびobjdumpから一貫して使用されていないようbinutilsです。

于 2012-12-17T11:09:36.720 に答える
0

また、からの出力gcc -Sはリンクされていないため、からの出力がリンクされている間は実行可能ではありませんobjdump.exe

于 2013-09-02T18:12:47.020 に答える