首页 > 解决方案 > 攻击实验室中操作码末尾的 c3

问题描述

我正在研究一个版本的攻击实验室。对于第 4 阶段和第 5 阶段,在农场操作中,我有几个以 c3 结尾的操作,但后面还有一个单独的retq(c3) 指令,如下所示:

0000000000401a6e <addval_370>:
 401a6e:       8d 87 58 90 90 c3       lea    -0x3c6f6fa8(%rdi),%eax
 401a74:       c3                      retq

根据我们得到的信息,我可以从 58 代表的操作码中破译,popq %rax两个 90 代表nop(无操作)但程序计数器增加了 1。然而,最后的 c3 让我感到困惑。是不是说在这些各自的动作之后,我们就执行了一次return函数呢?然后我们又回来了?它的含义是否类似于以下指令:

0000000000401a6e <addval_370>:
 401a6e:       8d 87 58 90 90 90       lea    -0x3c6f6fa8(%rdi),%eax
 401a74:       c3                      retq

我知道我可能是不正确的,因为我的推理似乎很幼稚。因此,非常感谢任何指导和帮助。

标签: assemblyx86-64exploitmachine-codeopcode

解决方案


如果您跳转/返回到87LEA 内的字节(而不是 LEA 操作码本身),那么是 3 NOP 然后 ac3 ret将与 2 NOP 然后 a 具有相同的效果c3 ret

ret 指令无条件地覆盖 RIP,因此程序计数器之前的值无关紧要。


推荐阅读