gpt4 book ai didi

assembly - jmpq 命令在此示例中执行什么操作

转载 作者:行者123 更新时间:2023-12-02 13:58:42 27 4
gpt4 key购买 nike

我们正在使用 gdb 调试器来读取汇编函数。

在汇编中,我们有以下说明:mov 0xc(%rsp),%eaxjmpq *0x402390(,%rax,8)

在内存位置*0x402390,我们有值0x8e。在寄存器 rax 中,我们有这个特定函数的第二个整数输入(可以使用变量 y)。

根据我们的分析,我们推断出该函数接受三个变量 (x, y, z) 并且可以在内存位置 (rsp) 找到它们、(rsp + 8)(rsp + 12) 分别。

我们想知道jmpq *0x402390(,%rax,8)中发生了什么。它是否跳转到(0x8e + rax*8)处的指令?如果是这样,我们如何才能找到该指令的名称?

这是函数phase_3的汇编代码的完整转储:

Full assembly function

最佳答案

炸弹实验室对吧哈哈?

此操作jmpq *0x402390(,%rax,8)用于直接跳转到存储的绝对地址
8 * %rax + 0x402390

如果您在 gdb 中执行 x/16gx 0x402390 (检查从 0x402390 开始的 16 个十六进制“巨字”),您将发现一个地址表如下所示: (我有一个不同的实验室,所以它和你的不一样)

 0x402880:  0x0000000000400fee  0x000000000040102b
0x402890: 0x0000000000400ff5 0x0000000000400ffc
0x4028a0: 0x0000000000401003 0x000000000040100a
0x4028b0: 0x0000000000401011 0x0000000000401018

所有这些地址都指向 jmpq *0x402390(,%rax,8) 之后的单个 mov 操作

关于assembly - jmpq 命令在此示例中执行什么操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26543029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com