2017-07-03 9 views
1

これは私が遭遇した動作の例です。使用アセンブラが32ビットコードを出力しないようです

[BITS 32] 

mov eax, 0x1234 

次のプログラムの組み立て

nasm -f bin in.asm -o out.bin 

を、私は以下のバイナリ出力を得る:

B8 34 12 00 00 

B8が 'EAXに移動' のオペコードですし、それは32ビットの値をとり、そこに入れなければなりません(つまり、ちょうどB8 34 12でなければなりません)。しかし、代わりに00 00を64ビット値のように置いています。

他のアセンブラを試していないので、これがNASM固有の問題であるかどうかわかりません。

答えて

2

あなたは混乱しています。あなたは4バイトあります。 4バイトは32ビットです。 64ビットではありません。これは8バイトです。

16進数のペアは1バイトです。そのため、逆アセンブル出力は16進数の対になります。

0000000 b848 beef dead babe cafe    
000000a 
+0

くそーを生成するために組み立てた(その後、進にダンプ)することができ、カウンタの例として、

[BITS 64] mov rax, 0xCAFEBABEDEADBEEF 

考えてみましょう、あなたは正しいです。 10分以上待ってから回答を受け入れることはできません... – almosnow

+2

フラットバイナリを作成していない場合は、 '-felf64'などを使用する必要があり、' [bits 64] 'が冗長になります。 '[bits 32]'は、32ビットのマシンコードを64ビットのオブジェクトファイルにアセンブルさせますが、それは通常は役に立ちません。 –

+0

@PeterCordesは、最新のものよりもわずか数秒前に無関係なコメントを削除していなければなりません。間違いなく「NOT」を逃したか? –

関連する問題