gpt4 book ai didi

assembly - 如果函数没有显式使用 'ret',为什么没有返回值

转载 作者:行者123 更新时间:2023-12-02 22:12:29 26 4
gpt4 key购买 nike

我有以下程序:

SECTION .text
main:
mov ebx, 10
mov ecx, 50

repeat:
inc ebx
loop repeat

mov eax, ebx
ret

当该程序运行时,它按预期返回 60。但是,如果删除最后的 ret 语句,程序运行正常,但随后返回 0。这是为什么?

最佳答案

当您离开“ret”时,计算机将执行最后一个“move eax, ebx”,然后执行计算机内存中接下来发生的任何事情。

我很惊讶你没有收到非法指令/访问;这将是最常见的 react 。不知何故,垃圾指令在丢弃寄存器之后就像一个返回。

它也有点不清楚你所说的“返回 60”是什么意思。您的意思是作为命令提示符的值?很明显,你的程序无法防御非法指令陷阱。我不清楚当你在没有防御的情况下遇到这样的陷阱时 Windows 会做什么;根据我的经验,当我这样做时,Windows 往往会终止我的进程,并且我会得到一些随机退出状态。 “0”可能就是这样的一种状态。

尝试添加:

      mov   byte ptr[eax], 0

在“ret”指令之前;这将导致非法内存引用。您报告您获得的状态。如果您在这种情况下得到零状态结果,我不会感到惊讶。

关于assembly - 如果函数没有显式使用 'ret',为什么没有返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20578122/

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