0

このアセンブリ コードが正常にアセンブルおよびリンクされるのに、実行時にセグメント エラーが表示されるのはなぜですか。指示の後にコメントして、私がやりたいことを考えました。

  jmp short init

action:
  pop esi
  xor eax, eax
  mov byte [esi+24], al ;null terminating the string.
  mov dword [esi+25],24 ;length of the string

  mov al,4 ;syscall write
  mov ebx,1 ;standard out
  lea ecx,[esi]   ;<<---------- Unsure about this. probably load the address of the string to ecx  
  mov edx,[esi+25] ;<<-- load edx with string length
  int 80h


init:
  call action
  db "what a pity! not working#LLLL"

NASM組み立てldてリンクするために使用しています。このプログラムは 64 ビット マシンで実行されますが、32 ビット互換にしたいと考えています。

4

1 に答える 1

1

に文字列のアドレスが必要ですecx。では、なぜpop esiですか?使用するpop ecxと、すでに正しい登録簿に登録されています。とにかく他の目的には必要ありません。

それとは別に、デフォルトでは書き込み可能ではないコード セグメントに書き込みます。

于 2013-11-03T07:18:25.207 に答える