-2

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

89 75 95 movl %esi, var_6ch

var_6ch在哪里ebp-0x6c

哪个部分89 75 95表示“地址” ebp-0x6c?我在互联网上找到89了 movl 的代码,也许 75 是用于注册 esi?或者也许 2 个字节编码这 2 个信息。

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

4

1 回答 1

3

你有一个错字,它是“movl %esi, -0x6b(%ebp)”。0x95 是 0x100 - 0x6b;那是-0x6b的二进制编码。

我通过制作一个简单的文件 ys 并输入:

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 等……或者阅读手册。

于 2020-08-19T22:07:06.207 回答