1

割り当てられたメモリへの書き込みに問題があります。これがコードです。

total: .long 1       # my memory

movl total, %eax     # I believe I'm copying address of total into eax
movl $53, %esi       # set some value in esi
movl (%esi), %eax    # and put this value into total 

なぜ機能しないのですか?「Naruszenie ochrony pamięci」(コア ダンプ) これはポーランド語で、メモリ アクセス違反のようなものを意味します。

4

2 に答える 2

2

まず、AT&T 構文では、ラベルのアドレスをレジスタに格納する代わりに、

movl total, %eax

Intel 構文では次のように逆アセンブルされます。

8b042500000000   mov eax, [0x0]

あなたが使用する必要があります:

movl $total, %eax

これは次のように分解されます。

b800000000       mov eax, 0x0

この意味で、AT&T 構文を使用する場合、バグを避けるために非常に注意する必要があります。

次に、上記の問題を修正した場合でも、Seva と harold が述べたように、最後の命令の括弧を修正する必要があります。次のようになります。

movl %esi, (%eax)

このコードは、アクセスできないメモリ領域にアクセスするため、セグメンテーション違反を引き起こします。プロテクト モードでは、任意のメモリ アドレスにアクセスできません。そのメモリ領域に対する読み取り/書き込み/実行権限が必要です。

于 2013-04-09T21:09:34.067 に答える
0

と置換する

movl %esi, (%eax)
于 2013-04-09T21:09:36.947 に答える