Assembly pop eax如何允许我退出func?

Assembly pop eax如何允许我退出func?,assembly,x86,nasm,Assembly,X86,Nasm,我不明白怎么做 pop eax jmp eax 请允许我退出该功能 以下是完整的代码: global _start _start: call func mov eax, 1 int 0x80 func: mov ebx, 42 pop eax jmp eax 该代码的全局思想是将退出代码设置为42 我猜堆栈中有些东西我不明白pop-eax;jmp eax与ret做的事情相同,只是它也垃圾eax。使用pop eax有什么好处吗;jmp eax

我不明白怎么做

pop eax
jmp eax
请允许我退出该功能

以下是完整的代码:

global _start

_start:
    call func
    mov eax, 1
    int 0x80

func:
    mov ebx, 42
    pop eax
    jmp eax
该代码的全局思想是将退出代码设置为42


我猜堆栈中有些东西我不明白

pop-eax;jmp eax
ret
做的事情相同,只是它也垃圾
eax
。使用
pop eax有什么好处吗;jmp eax
而不是
ret
?不。虽然有很多缺点,但最糟糕的是没有使用
ret
返回会破坏返回预测。我知道它是如何工作的!使用
call
eip
推到堆栈上。因此,当我弹出
eax
时,它将包含指令指针,因此我能够跳回到进入函数之前的位置,这要感谢
jmp eax
,这是正确的!而
ret
几乎就是这样做的。它有效地
pop-eip
pop-eax;jmp eax
ret
做的事情相同,只是它也垃圾
eax
。使用
pop eax有什么好处吗;jmp eax
而不是
ret
?不。虽然有很多缺点,但最糟糕的是没有使用
ret
返回会破坏返回预测。我知道它是如何工作的!使用
call
eip
推到堆栈上。因此,当我弹出
eax
时,它将包含指令指针,因此我能够跳回到进入函数之前的位置,这要感谢
jmp eax
,这是正确的!而
ret
几乎就是这样做的。它有效地
pop-eip