我正在尝试返回一个函数,它也调用了一个函数,但是我得到了一个SIGSEV。
MY ASSEMBLER:Linux,Unix nasm 64 + ld
样品:
;something
call myFunction
myFunction:
call func2
ret
func2:
;do sth
ret
一种可能性是将指针推向堆栈,但堆栈是有限的,不是吗?我需要一个解决方案,这样做n次,而n应该能够代表无限。
另一种可能性是调用函数并为返回做一个标签,但是当我执行一个由不同例程调用的函数时,我会遇到另一个问题:(
有一种优雅的方式吗?这个?
牛,所以我得到了建议,我应该尝试一下,因为它可以工作。
我尝试使用此代码:
section .data
test : db "test", 0x0a; length: 5
input: db "433", 0x00
blank: db 0xa
section .bss
section .text
global _start:
_start:
mov eax, 4
mov ebx, 1
mov ecx, input
mov edx, 4
int 80h
mov eax, input
call strToInt
mov [input], eax
mov eax, 4
mov ebx, 0
mov ecx, test
mov edx, 5
int 80h
ret
mov eax, 1
mov ebx, 0
int 80h;
strToInt:
mov ebx, 0; counter
mov ecx, 0; ecx is 4 the result
conversion_loop:
cmp BYTE[eax], 0
jz leave_loop
sub byte[eax], 48
inc eax
inc ebx
cmp ebx ,9
jge leave_loop
jmp conversion_loop
leave_loop:
call hey
ret
hey:
mov eax, 4
mov ebx, 0
mov ecx, test
mov edx, 5
int 80h
ret
(对不起代码,这个长 - .-)
结果是:
433test
test
SEGFAULT
这是否澄清了这一点?
答案 0 :(得分:1)
看看这一行:
int 80h
ret
我认为此ret
跳出了您的代码段。您必须删除ret
才能调用sys_exit函数以正常完成编程。