将参数传递给C函数时的nasm分段错误(x86_64汇编)

时间:2016-12-23 01:04:49

标签: c arrays segmentation-fault function-pointers nasm

我是nasm的新手,并尝试实现一个代码,该代码将两个参数(int 64bit)传递给对这些变量应用fold函数的C代码。

我认为传递给 rdx 的数组,像+或 - 传递给 rdi 的运算符以及传递给 rsi 的数组元素的数量(int input)。函数第一次应用的结果应该用作下一个应用程序的第一个参数,依此类推。

现在,当我试图再次为下一个数组元素调用该函数时,nasm打印出一个seg错误(当我只调用该函数一次时它就起作用了。)我不确定是不是因为我采用了特定元素的方式数组或因为缺少某些东西。我试图推送参数,然后通过堆栈指针复制它们,但最终会出现相同的错误消息。 nasm assembly命令:nasm -f elf64 fold.nasm C编译命令:gcc -std=c99 -o fold fold.c fold.o

global fold

section .text


jmp fold1

**prefold:**

xor r15,r15         
xor rbx,rbx         
xor rax,rax 

mov rax,[rdx]       ; take first array element to rax

mov rbx,[rdx+8]     ; 2nd to rbx

mov r15,8           

jmp fold1

**fold:**

jmp prefold

fold1:

mov r8,rdi              
;secure operator and length of array in r8,r9

mov r9,rsi

mov rdi,rax             
;the function pointer requires the arguments beeing stored in rdi,rsi 

mov rsi,[rdx]

add r15,8

mov rbx, [rdx+r15]

call r8

dec r9

mov rdi,r8      
; restore operator and decremented array length

mov rsi,r9

cmp r9,1    

jne fold1

ret

提前致谢

0 个答案:

没有答案