NASM: SegFault on MOV ECX



我正在尝试运行一个非常简单的汇编程序,但是我似乎都会得到segfaults。

这是我的代码(应该在Linux计算机上打印'a'(

section .data
    buffer times 50 db 97
    pointer db 0
section .text
    global _start
    _start:
    mov ECX , pointer
    mov EDX , [buffer + ECX]
    mov EAX , 4
    mov EBX , 1
    mov ECX , EDX
    mov EDX , 1
    int 0x80

它在第一个MOV上引起了Segfault,但对我来说似乎应该起作用。

我将其减少到几乎一无所有,但仍然是segfault。

section .data
    msg db "hello"
section .text
    global _start
    _start:
    mov EAX,1

我已经成功地运行了:

section .text
    global _start
_start:
    mov ax, 0b
    dec ax
    sub ax, 11111111b
    mov bx, 97
    add ax, bx
    mov [INVENTORY], ax ; put a in first inventory pos

    mov eax, 4        
    mov ebx, 1
    mov ecx, INVENTORY      
    mov edx, 1        
    int 0x80
    mov ax, [INVENTORY]
    add ax, 1
    mov [INVENTORY + 1], ax ; put b in second inventory pos
    mov [VAR], ax
    mov eax, 4        
    mov ebx, 1
    mov ecx, VAR    
    mov edx, 1        
    int 0x80
    mov eax, 4        
    mov ebx, 1
    mov ecx, 'n'         
    mov edx, 1        
    int 0x80
    mov eax,1
    int 0x80
_newline:

section .data
VAR DW 0
INVENTORY TIMES 8 DW 0

是否有可能与我用于新线或选项卡的符号有关吗?我从java生成汇编,然后将 t用于标签,而 n则用于新行(以及空格,看起来还不错。

我正在使用NASM,并且正在这里运行:https://www.tutorialspoint.com/compile_assembly_online.php

谢谢!

如果您只是想打印一组'a。

section .data
        buffer times 50 db 97
        len.buffer equ $-buffer
        pointer db 0
section .text
    global _start
_start:
        ; ssize_t write(int fd, const void *buf, size_t count);
        ; i386             ebx              ecx            edx   esi   edi   ebp
        mov EAX , 4             ; write syscall
        mov EBX , 1             ; std out
        lea ecx, [buffer]       ; buffer
        mov edx, len.buffer     ; size
        int 0x80
_exit:
        mov eax, 1              ; exit syscall
        int 0x80

输出:

./yvon_001
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandavid@ubuntuserver00A:~/asm$ ./yvon_001

最终@michealpetch是正确的,我需要在代码末尾添加一个exit syscall。我尝试过的示例仍然进行了segfault,因为我是在注册表中移动指针而不是[指针]。

感谢您的评论和答案!

相关内容

  • 没有找到相关文章

最新更新