gpt4 book ai didi

程序集 'call' 与 'jmp'

转载 作者:行者123 更新时间:2023-12-03 01:16:40 26 4
gpt4 key购买 nike

我被告知尝试使用“jmp”而不是“call”,但是“jmp”不喜欢我..当我跳跃时它不会返回(所以它永远不会退出并且不快乐的日子),但是调用会返回并正常退出。

我很高兴使用“call”,但实际上我应该尝试克服“jmp”吗?

这个简单的代码只是显示当我jmp时它是否永远不会返回并退出。

_start:

jmp _Print
jmp _Exit

ret


_Exit:

; normal exit

ret


_Print

; print something

ret

另外..如果这会改变什么的话,我正在Linux终端中运行这一切。

最佳答案

首先,jmp 只是在 call 时“跳转”到您为其指定的标签(这是程序指令存储在内存中的内存地址) code> 将返回的位置(在 call 指令下方)存储在堆栈中,jmp 到标签,然后在 ret 处指令,jmp返回到存储的位置(如上所述,在调用指令下方)。正如您所看到的,有一点不同。恕我直言,我相信简单地调用函数就可以了,因为这就是c++编译器对函数所做的事情,但如果你必须jmp,那么好吧,只要确保推送返回位置或创建另一个标签以在执行完某些代码后返回。

这是完成后跳转到其他标签的示例:

_start:



jmp _Print;



_start_label:



jmp _Exit;

_Exit:
; exit stuff goes here

ret;

_Print:

;print stuff goes here

jmp _start_label;

或者你可以直接使用 call :)

关于程序集 'call' 与 'jmp',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32793117/

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