如何使用BSS var将字符串移动到寄存器NASM中

时间:2015-09-17 05:32:31

标签: linux string assembly x86 nasm

我试图将字符串移动到BSS var中,我尝试了各种方法,但我有一种感觉,除非我对字符串进行硬编码或使用读取来抓取字符串I' m打一场徒劳的战斗,我遇到的问题是,虽然我可以将文本数据输入到正确的寄存器中,但是更多的数据伴随着它会破坏输出,还有一些如何破坏vdlen的值(如果我直接为ecx赋值在WriteFile中放置了适当的长度,但尝试使用vdlen导致它远离雷达)

如何获得正确的结果(即"您好!"在" text.txt")?

section .bss
      vdata resw 10
      vdlen resb 3
      vfd resb 1
      vfn resb 15
      err resb 2
section .text
      mov eax,vfn
      mov dword [eax],'test'
      mov dword [eax+3], '.txt'
      mov ebx,vdata
      mov dword [ebx], 'Hell'
      mov dword [ebx+3],'o!'
      mov ecx,vdlen
      mov [ecx], 0x03h
      jmp WriteFile
ProgramEnd:
      mov eax,1
      mov ebx,[err]
      int 80h
WriteFile:
      mov eax,5   ;Syscall for open()
      mov ebx,vfn
      mov ecx, 65  ; mode Write-only Create
      mov edx, 420 ; permissions rw-r-r
      int 80h      ; Linux Kernel Interrupt

      mov [vfd],eax ; get file descriptor

      mov eax,4   ;Syscall for write()
      mov ebx,[vfd] ; FD argument
      mov ecx,[vdata] ; this is where my issue is
      mov edx,[vdlen] ; length of vdata
      int 80h

      mov [err],eax
      jmp ProgramEnd

1 个答案:

答案 0 :(得分:0)

在rkbh和MikeCat向OP提供的非常有用的建议之后,OP得到了它的工作:

import {PolymerElement, html} from '/node_modules/@polymer/polymer/polymer-element.js';
loadElement('/poly2-element.html');

class Poly3Element extends PolymerElement {
    ....
}

TL; DR:OP试图使用DWORD MOV将6个字节填入4个字节,并错误地指定了vdlen的大小。