【问题标题】:Not sure which address jmp is jumping to不确定 jmp 跳转到哪个地址
【发布时间】:2013-10-06 04:16:57
【问题描述】:

您好,我刚开始学习汇编,我一直在查看一些代码,我知道 jmp 函数是一个无条件跳转,但我不确定如何判断这个 jmp 跳转到哪里。

jmp    *0x804a1a0(,%eax,4)

我知道 "(,%eax,4)" 部分表示存储在 eax*4 中的值,并且它将涉及将其添加到其他内容以获得它要跳转到的最终值,但我不知道如何处理 *0x804a1a0 部分中的“*”。
这是否意味着存储在内存地址“0x804a1a0”+ eax*4 的值(并且这个十六进制是我应该跳转到的点)?

【问题讨论】:

  • 虽然我仍然对它的含义感到好奇,但我能够在不弄清楚 *0x804a1a0(,%eax,4) 含义的情况下解决原始问题。

标签: assembly x86 gdb


【解决方案1】:

这只是 AT&T 汇编中的一个符号问题。 见-https://sourceware.org/binutils/docs/as/i386_002dVariations.html

AT&T 绝对(相对于 PC 相对)跳转/调用操作数以 `*' 为前缀;它们在 Intel 语法中是无定界的。

所以你的计算是正确的,跳转目标存储在[0x804a1a0 + eax*4]中,这很可能是从0x804a1a0开始的跳转表,编译器使用eax作为索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2023-02-11
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多