gpt4 book ai didi

linux - 如何多次返回被调用函数/NASM

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:20 24 4
gpt4 key购买 nike

我正在尝试返回一个函数,该函数也调用一个函数,但我得到一个 SIGSEV。

我的汇编程序:Linux、Unix nasm 64 +ld

示例:

;something
call myFunction

myFunction:
call func2
ret

func2:
;do sth
ret

一种可能是将指针压入堆栈,但堆栈是有限的,不是吗?我需要一个解决方案来执行 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

这是否澄清了这一点?

最佳答案

看这几行:

    int 80h
ret

我认为这个ret 是跳出你的代码段。您必须删除 ret 才能调用 sys_exit 函数以正常完成程序。

关于linux - 如何多次返回被调用函数/NASM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41126161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com