Я пытаюсь вернуть функцию, которая также вызывает функцию, но я получаю SIGSEV.Как возвращать вызываемые функции несколько раз/NASM
МОЯ ASSEMBLER: Linux, Unix NASM 64 + л.д.
образец:
;something
call myFunction
myFunction:
call func2
ret
func2:
;do sth
ret
Одним из возможных вариантов является нажать указатель на стек, но стек Limited, не так ли? И мне нужно решение для этого n раз, тогда как n должно быть в состоянии стоять бесконечно.
Другая возможность состоит в том, чтобы вызвать функцию и сделать ярлык для возвращения, но когда я хав функции, которая вызывается различными рутинами, я стереосистема и обновите другую проблему :(
Есть элегантный способ из делает это
Ox, так что я получил предложение, я должен попробовать, как она могла бы работать
Я пробовал с этим кодом:.
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
уточнить ли это это немного?
ОК, бесконечно, я имею в виду, n раз. Проблема: регистр, в котором хранится указатель на последний вызов - мнемоника обновляется при каждом новом вызове – Linuxer4Fun
Но адреса возврата хранятся в стеке, поэтому программа возвращается хорошо, независимо от того, сколько вызовов fuction задействовано. –
действительно? Собираюсь повторить это. Я расскажу вам позже, как это получилось. – Linuxer4Fun