main
(ubuntu 14.04を実行している)64ビットマシンでgcc -g -o program -m32 program.c
を使ってコンパイルされた(単純なおもちゃプログラムの)プロローグの中で、解体以下:main()のプロローグでスタックポインタを整列させる目的は何ですか?
dump of assembler code for function main:
0x08048e24 <+0>: push %ebp
0x08048e25 <+1>: mov %esp,%ebp
0x08048e27 <+3>: and $0xfffffff0,%esp
...
> < 3で命令の目的は何ですか? つまり、$esp
は16桁のアドレスを指している必要がありますか?
-m32フラグを指定してコンパイルすると、それは保持されますか? – Bush
@Bush私はSSEのために '-m32'で16バイトを使うと思います。 – ouah
まあ、すべてのx86-64 ABIがそうしているわけではないので、人々がx86-64 ABIだけを偽装していると私はいつも少し苛立ちます。この場合、Ubuntuの文脈では、どのABIが意味されているかははっきりしていますが、必ずしもそうであるとは限りません。 –