0

私が使用しているマシンは 64 ビットで、次のようなアセンブリ コードを書きました。

movl $0x12e48ead 0x0804b324
pushl $0x08049103
ret

AT&T 形式を使用します。コマンドラインを使用してコンパイルすると:

gcc -m32 -c firecracker.S

次のようにエラーが発生します。

firecracker.S: Assembler messages:
firecracker.S:1: Error: junk `0x0804b324' after expression
firecracker.S:1: Error: suffix or operands invalid for `mov'

なぜこれが起こるのだろうか。誰か助けてくれませんか?どうも。

4

2 に答える 2

0

これは構文エラーのようです。mov の構文は次のとおりです。

movl $sourceaddr, $destaddr

コンマとドル記号に注意してください。もちろん、sourceaddr と destaddr もレジスタにすることができます。

あなたが指定したように、64ビットのマシンは違いを生むべきではありません。これにより-m32、32ビットプラットフォームで実行するためのコードがアセンブルされます。

于 2012-06-16T13:13:22.193 に答える
0

コンマがありません:

movl $0x12e48ead, 0x0804b324
pushl $0x08049103
ret

うまくビルドします。

于 2012-06-16T13:13:33.707 に答える