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 回答