gpt4 book ai didi

x86 - 反汇编一条 'faddl'指令

转载 作者:行者123 更新时间:2023-12-04 16:17:51 25 4
gpt4 key购买 nike

在我为 x86 平台上的 32 位 Linux 编写反汇编程序的冒险中,我遇到了一个问题。当我使用 objdump 反汇编一个简单的 ELF-32 可执行文件时,我看到了以下操作码序列:

dc 82 04 08 0d 00     faddl  0xd0804(%edx)

但是当我看到 Intel manual ,我没有看到与此对应的操作码。 fadd指令以 0xDC 开头,但随后需要 m64fp操作数,即“内存中的内存四字操作数”。

现在,这是否意味着操作数是 64 位地址(这意味着 fadd 指令是 64 位指令,但没有以 REX 字节为前缀),还是只是 32 位指向四字(64 位)的地址?

我在这里遗漏了一些微不足道的东西,还是我对编码 x86 指令的理解错误?

最佳答案

让我们分解一下。

> dc 82 04 08 0d 00     faddl  0xd0804(%edx)
| | \____ ____/
| | V
| | |
| | +---------> 32-bit displacement
| +-----------------> ModRM byte
+--------------------> Opcode

详细查看文档, dc确实是为了 m64real浮点参数作为源。它将将此 64 位参数添加到 ST(0)浮点寄存器。

然而,它是第二个字节 82这决定了 64 位值的来源。这转换为二进制 ModRM 字节:
+---+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
+---+---+---+---+---+---+---+---+
| MOD | REG/OPCD | R/M |

如果您查看链接文档中的表 2.2(用于 32 位寻址模式的表),您会看到它转换为 disp32[EDX] .

换句话说,它将接下来的 32 位(四个字节)添加到 edx注册并使用该地址从内存中提取 64 位值。

关于x86 - 反汇编一条 'faddl'指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8131978/

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