なぜ次のコードでセグメンテーションフォルトが発生しませんか?セクション.dataから実行するとコードが動作しますが、セクション.textのセグメンテーションフォールト
global _start
section .data
_start:
mov ecx, 3
xor byte[_start+1], 0x02
mov eax, 1
mov ebx, 2
int 80h
が、私はそれは同じコードが.text
セクションで実行したときと同じ場所(コメントでマークされた行)でセグメンテーションフォールトと予想:今すぐ
global _start
section .text ; changed from data to text
_start:
mov ecx, 3
xor byte[_start+1], 0x02 ; ******get segmentation fault here
mov eax, 1
mov ebx, 2
int 80h
、私はセクション.data
があることを知っています読み取り/書き込み用で、セクション.text
は読み取り専用です。
違法メモリアドレスにアクセスしようとするとどうして問題になるのですか?
この例では、セクション.data
のセグメンテーションフォルトも、セクション.text
で取得したのと同じ場所に取得すると予想していました。
Um、 'xor'命令は' _start + 1'のバイトを修正しています。 'text'セクションでは、そのバイトは読み取り専用ですが、' data'セクションでは書き込み可能です。あなた自身の質問に答えるのに十分な情報をすでに知っているようですので、私は混乱しています。 –