assembly - 攻击实验室中操作码末尾的 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
我知道我可能是不正确的,因为我的推理似乎很幼稚。因此,非常感谢任何指导和帮助。
解决方案
如果您跳转/返回到87
LEA 内的字节(而不是 LEA 操作码本身),那么是 3 NOP 然后 ac3 ret
将与 2 NOP 然后 a 具有相同的效果c3 ret
。
ret 指令无条件地覆盖 RIP,因此程序计数器之前的值无关紧要。
推荐阅读
- java - Java中的机器人不执行命令
- css - 当我只有一个 CSS 时的中心框
- c# - 在 Visual Studio 中使用预览功能和预览语言
- javascript - 单击/聚焦时更改 Select 组件的 InputLabel 颜色
- c# - 如何使跟随 Ai 在基于环形 2D 网格的地图上工作
- javascript - 在画布上绘制太快时如何避免间隙?
- javascript - 用于创建相关产品列表的 Wix 指南不会在单击时自行重新加载
- python - Python:比较字典中键之间的值重叠
- azure - 如何在json文件中引用环境变量
- python - Tensorflow 错误:In[0] 不是矩阵 [Op:MatMul]