小编ADP*_*ADP的帖子

JZ是不是在栈里放了一个返回地址?

我正在阅读汇编代码优化手册第 2.3 节常见编码陷阱 - 第 9 页

  1. 无与伦比的 PUSH 和 POP 指令。对于通过函数的所有可能路径,PUSH 和 POP 指令的数量必须相等。例子:

    push ebx
    test ecx, ecx
    jz   Finished
    ...
    pop  ebx
    Finished:       ; Wrong! Label should be before pop ebx
    ret
    
    Run Code Online (Sandbox Code Playgroud)

这里,如果 ECX 为零,则不会再次弹出推送的 EBX 值。结果是RET指令会弹出EBX之前的值并跳转到错误的地址。

我的疑问是:jz指令不是将返回地址存储在堆栈中吗?什么其他指令一样jmpjgjgejljle等?

x86 assembly

2
推荐指数
1
解决办法
54
查看次数

标签 统计

assembly ×1

x86 ×1