了解此简单的movl操作码

问题描述

我开始学习阅读操作码,并且发现了这一点:

89 75 95 movl %esi,var_6ch

var_6chebp-0x6c

89 75 95的哪个部分表示“地址” ebp-0x6c?我在互联网上发现89是movl的代码,也许75是注册esi的代码?或者可能是2个字节对​​这2条信息进行编码。

在哪里可以找到更多有关此内容快速搜索这些内容

解决方法

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

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

movl %esi,-0x6c(%ebp)

编译为32位(cc -m32)。然后,使用otool(如果您使用的是Linux,则为macos,objdump)转储文本部分: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等...或阅读手册。