Asm外部功能导致分段故障

时间:2019-05-10 11:09:26

标签: assembly segmentation-fault x86-64

我在一个文件中的asm中编写了一个简单的基本交换功能。在另一个文件中,我编写了一个“所谓的”主程序来测试我的交换功能。但是,一旦调用该函数,就会发生分段错误。我不知道为什么会这样。


global swap

;given two addresses of stack variables (rdi, rsi) swaps the content of the two
;variables
swap:
enter 0, 0


mov rax, [rdi] ;save of var1
mov rdx, [rsi] ;save of var2
mov rdi, rbx
mov rsi, rax 

leave
ret

该函数接收两个堆栈变量的地址,以在rdi和rsi中交换;这是测试功能的代码:


global _start
extern swap

section .text
_start:
enter 16, 0
mov qword [rbp], 0xFF
mov qword [rbp+8], 0x11

mov rdi, [rbp]
mov rsi, [rbp+8]
call swap  ;swap causes seg fault?? ------------------

    cmp qword [rbp], 0xFF
    jz FAIL
    cmp qword [rbp+8], 0x11
    jz FAIL
    cmp qword [rbp], 0x11
    jnz FAIL
    cmp qword [rbp+8], 0xFF
    jnz FAIL

;else success

mov rax, 60
xor rdi, rdi
syscall

 FAIL:
    mov rax, 60
    mov rdi, -1
    syscall

当我调用交换函数时发生分段错误。我怀疑这与访问主程序的堆栈有关,但是我不知道该怎么做。 我也有一个make文件,可以将文件编译和链接在一起(据我所知,那里没有问题)

0 个答案:

没有答案