gpt4 book ai didi

linux - NASM:MOV ECX 上的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:22 25 4
gpt4 key购买 nike

我正在尝试运行一个非常简单的汇编程序,但是无论我做什么,我似乎都会遇到段错误。

这是我的代码(应该在 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 上导致段错误,但在我看来它应该有效。

我把它减少到几乎没有,但它仍然是段错误。

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
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\ndavid@ubuntuserver00A:~/asm$ ./yvon_001

关于linux - NASM:MOV ECX 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43713074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com