理解这个简单的 movl 操作码

Understanding this simple movl opcode

我开始学习阅读操作码,我发现了这个:

89 75 95 movl %esi, var_6ch

其中 var_6ch 位于 ebp-0x6c

89 75 95的哪一部分表示'address'ebp-0x6c?我在网上发现 89 是 movl 的代码,也许 75 是注册 esi?或者这 2 个字节可能编码这 2 个信息。

在哪里可以找到更多相关信息并快速搜索这些内容?

你打错了,是“movl %esi, -0x6b(%ebp)”。 0x95 是 0x100 - 0x6b;那是-0x6b的二进制编码。

我通过创建一个简单的文件 y.s 并输入:

找到了这个
movl %esi, -0x6c(%ebp)

为 32 位 (cc -m32) 编译它。然后,使用 otool(macos,objdump 如果你是 linux)转储文本部分:otool -t;然后我又加了几行:

movl %esi, -0x6b(%ebp)
movl %esi, -1(%ebp)

产生了:

Contents of (__TEXT,__text) section
00000000    89 75 94 89 75 95 89 75 ff

使内容非常明显。接下来尝试将 %ebp 替换为 %esp、%eax,然后将 %esi 替换为 %edi、%edx 等...或阅读手册。