以下Intel x86指令是操作码0x31:xor <r/m32>,<r32>
。在指令的实际机器代码中,0x31后跟另一个十六进制值,表示使用的寄存器或存储器地址。我的问题如下:
答案 0 :(得分:3)
您可以在Intel® 64 and IA-32 Architectures Software Developer Manuals中找到有关英特尔处理器操作码的完整说明。 XOR
指令是第2B卷:指令集参考,M-Z。
答案 1 :(得分:1)
回答第二部分。
您不希望自由修改堆栈指针ESP
。如果您损坏它,您的代码将崩溃或挂起。
同样,指令要使用的地址应该都对应于已分配的可写内存。如果您尝试访问未由物理内存映射的内存位置,或者只读,但是您正在写入内存位置,则代码将崩溃。
因此,您必须观察基数和索引寄存器,位移和索引寄存器乘数。当它们组合在一起形成一个你要读/写的内存地址时,它们应指向你知道可访问内存的地方。
通常,您可以通过在堆栈上推送内容或递减ESP
来为堆栈分配一些内存。
如果您需要访问程序的代码存储区,请确保它们只是读取。代码存储器通常是只读的。
如果您需要执行某些操作,则必须是现有程序的代码或位于可执行内存中的代码。预计默认情况下,所有不是程序代码的内存都不可执行。 Windows和Linux中有一些特殊功能可以改变内存区域的内存保护,并使其可执行或可写。