我被告知要尝试使用'jmp而不是'call',但是'jmp'并不喜欢我..当我跳的时候它不会返回(因此它永远不会退出并且不是快乐的日子),但是调用返回并正常退出。
我很高兴使用'call',但实际上我有理由尝试克服'jmp'吗?
这个简单的代码只显示当我jmp
时它永远不会返回并退出。
_start:
jmp _Print
jmp _Exit
ret
_Exit:
; normal exit
ret
_Print
; print something
ret
同样..如果改变了什么,我在Linux终端中运行这一切。
答案 0 :(得分:23)
嗯,首先,jmp
只是“跳跃”'到你给它的标签(程序指令存储在内存中的内存地址),而call
存储它将返回的位置(在call
指令下面),{ {1}}到标签,然后在jmp
指令,ret
回到存储的位置(如上所述,在调用指令下面)。你可以看到有点不同。恕我直言,我认为简单地jmp
函数是好的,因为这是c ++编译器对函数的作用,但如果你必须call
,那么好吧,只需确保jmp
返回位置或创建另一个标签,以便在完成执行某些代码后返回。
以下是完成后跳转到其他标签的示例:
push
或者您可以使用call:)