我目前正在尝试编写一个反汇编器。我找到了以下操作码及其含义的列表,因此决定在运行时解析它:
http://web.archive.org/web/20150810224114/http://mprolab.teipir.gr/vivlio80X86/pentium.txt
但是我卡在了操作码0x00上:
它后面跟着一个reg/modbyte。对我来说,解析它并不是什么问题。
但是我在Scale-Index-Base字节上遇到了麻烦:
如果您实际上将esp指定为索引寄存器,则实际上意味着没有索引寄存器。
对于ebp的基址寄存器也是如此。但是我已经尝试过C ++内联汇编器:可以编译:
但是我在Scale-Index-Base字节上遇到了麻烦:
如果您实际上将esp指定为索引寄存器,则实际上意味着没有索引寄存器。
对于ebp的基址寄存器也是如此。但是我已经尝试过C ++内联汇编器:可以编译:
add [ebp*2+ebp],cl
那么当使用ebp作为基址寄存器实际上意味着根本没有使用基址寄存器时,如何使用ebp作为基址寄存器呢?
SIB
代表 "比例-索引-基址", 根据其在 SIB 字节中的位掩码编码而命名:0ssiiibbb
b(按位)。 - ahmd0[EBP]
被编码为[ebp + disp8=0]
。 - Peter Cordes