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
。