assembly 装配-分段故障[重复]

vaj7vani  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(307)
    • 此问题在此处已有答案**:

What happens if there is no exit system call in an assembly program?(1个答案)
4小时前关门了。
我是装配新手。我正在尝试这样做:

SECTION .data

SECTION .bss

SECTION .text
    global _start

_start:
    nop
    mov rax, 067FEh
    mov bx, ax
    mov cl, bh
    mov ch, bl
    nop

每次运行这个程序都会出现分段错误,我用gdb测试了一下哪里出错了,好像每次mov rax, 067FEh之后都说程序收到SIGSEGV,我试着用eax或者ax替换rax,还是报错,我试着在rax里面查值,是067FEh.我不知道发生了什么.有人能帮忙吗?

a64a0gku

a64a0gku1#

SIGSEGV来自您退出.text部分的事实。您需要添加:

mov eax, 1
int 0x80

以正确退出程序。如果不这样做,带有的代码将继续执行,超出程序的范围(通常执行到一串00 00字节中)。此外,您不需要section .datasection .bss声明,因为您不使用它们。

相关问题