use*_*489 17 x86 assembly subroutine
我被告知要尝试使用'jmp而不是'call',但是'jmp'并不喜欢我..当我跳它不返回时(因此它永远不会退出并且不开心的日子),但是调用返回和退出正常.
我很高兴使用'呼叫',但实际上我有理由尝试克服'jmp'吗?
这个简单的代码只显示当我'jmp'时它永远不会返回并退出.
谢谢你提前获得任何帮助.
_start:
jmp _Print
jmp _Exit
ret
_Exit:
; normal exit
ret
_Print
; print something
ret
Run Code Online (Sandbox Code Playgroud)
另外..如果改变了什么,我在Linux终端中运行这一切
小智 28
好吧,首先,jmp
只需"跳转"到你给它的标签(这是一个存储器地址,因为程序指令存储在内存中),同时call
存储它将call
在堆栈中返回的位置(在指令下面),jmp
到标签,然后在ret
指令处,jmp
返回到存储的位置(如上所述,在调用指令下面).你可以看到有点不同.恕我直言,我相信简单的call
函数很好,因为这是c ++编译器对函数的作用,但如果你必须jmp
,那么好吧,只需确保push
返回位置或创建另一个标签,一旦完成执行一些代码就返回.
以下是完成后跳转到其他标签的示例:
_start:
jmp _Print;
_start_label:
jmp _Exit;
_Exit:
; exit stuff goes here
ret;
_Print:
;print stuff goes here
jmp _start_label;
Run Code Online (Sandbox Code Playgroud)
或者你可以使用电话:)