理解这个简单的 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 等...或阅读手册。
我开始学习阅读操作码,我发现了这个:
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 等...或阅读手册。