我开始学习阅读操作码,我发现了这个:
89 75 95 movl %esi, var_6ch
var_6ch
在哪里ebp-0x6c
哪个部分89 75 95
表示“地址” ebp-0x6c
?我在互联网上找到89
了 movl 的代码,也许 75 是用于注册 esi?或者也许 2 个字节编码这 2 个信息。
我在哪里可以找到更多相关信息并快速搜索这些内容?
我开始学习阅读操作码,我发现了这个:
89 75 95 movl %esi, var_6ch
var_6ch
在哪里ebp-0x6c
哪个部分89 75 95
表示“地址” ebp-0x6c
?我在互联网上找到89
了 movl 的代码,也许 75 是用于注册 esi?或者也许 2 个字节编码这 2 个信息。
我在哪里可以找到更多相关信息并快速搜索这些内容?
你有一个错字,它是“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 等……或者阅读手册。