代码之家  ›  专栏  ›  技术社区  ›  sdasdadas

编写引用运算符汇编版本时出现分段错误

  •  0
  • sdasdadas  · 技术社区  · 4 年前

    我对x86汇编很陌生,我正试图构建一个hello world程序。我试图制作一个子程序,将单个字节写入stdout,但遇到了问题。

    线 mov ebx, [esp+1] (当我调用子例程时,加载传递的字节)会导致segfault。

    我已经尝试过用自身对ebx寄存器进行xoring,以确保它是空的,并确保它不会干扰系统调用

    _start:
        push 32h
        call _writeByte
    
        ; This just jumps to an exit routine
        jmp  _exit
    
    _writeByte:
        ; This line causes the problem. If I remove it the program works fine
        mov  ebx, [esp+1]
        xor  ebx, ebx
    
        mov  eax, 1
        mov  edi, 1
        mov  esi, tmp
        mov  edx, 1
        syscall
    
        ret
    

    为什么程序会分段?

    0 回复  |  直到 4 年前