英特尔x86异或操作码0x31

英特尔x86异或操作码0x31,x86,opcode,X86,Opcode,以下英特尔x86指令是操作码0x31:xor,。在指令的实际机器代码中,0x31后跟另一个十六进制值,表示所使用的寄存器或内存地址。我的问题如下: 什么是十六进制代码,指的是可以进行异或运算的可能寄存器 给定可以使用的寄存器和内存参数组合的数量,该指令可能创建的机器代码有哪些约束 在中可以找到英特尔处理器操作码的完整说明。异或指令在第2B卷:指令集参考,M-Z的第682页。中有英特尔处理器操作码的完整说明。异或指令是2B卷:指令集参考,M-Z.第682页。回答第二部分 您不想随意修改堆栈指针,E

以下英特尔x86指令是操作码0x31:
xor,
。在指令的实际机器代码中,0x31后跟另一个十六进制值,表示所使用的寄存器或内存地址。我的问题如下:

  • 什么是十六进制代码,指的是可以进行异或运算的可能寄存器
  • 给定可以使用的寄存器和内存参数组合的数量,该指令可能创建的机器代码有哪些约束

  • 在中可以找到英特尔处理器操作码的完整说明。异或指令在第2B卷:指令集参考,M-Z的第682页。

    中有英特尔处理器操作码的完整说明。异或指令是2B卷:指令集参考,M-Z.第682页。

    回答第二部分

    您不想随意修改堆栈指针,
    ESP
    。如果您损坏了它,您的代码将崩溃或挂起

    同样,指令将要使用的地址都应该对应于分配的可写内存。如果您试图访问一个物理内存未映射的内存位置,或者是只读的,但您正在对其进行写入,那么您的代码将崩溃

    所以你必须观察你的基寄存器和索引寄存器,位移和索引寄存器乘法器。当组合在一起形成一个您要读/写的内存地址时,它们应该指向您知道有可访问内存的某个地方

    通常,您可以在堆栈上为您的需要分配一些内存,方法是将某些内容推到堆栈上,或者通过减少
    ESP

    如果您需要访问程序的代码内存,请确保这些是只读的。代码存储器通常是只读的


    如果您需要执行某些内容,则必须是现有程序的代码或位于可执行内存中的代码。默认情况下,所有非程序代码的内存都是不可执行的。不过,Windows和Linux中有一些特殊功能可以更改内存区域的内存保护,并使其可执行或可写。

    回答第二部分

    您不想随意修改堆栈指针,
    ESP
    。如果您损坏了它,您的代码将崩溃或挂起

    同样,指令将要使用的地址都应该对应于分配的可写内存。如果您试图访问一个物理内存未映射的内存位置,或者是只读的,但您正在对其进行写入,那么您的代码将崩溃

    所以你必须观察你的基寄存器和索引寄存器,位移和索引寄存器乘法器。当组合在一起形成一个您要读/写的内存地址时,它们应该指向您知道有可访问内存的某个地方

    通常,您可以在堆栈上为您的需要分配一些内存,方法是将某些内容推到堆栈上,或者通过减少
    ESP

    如果您需要访问程序的代码内存,请确保这些是只读的。代码存储器通常是只读的

    如果您需要执行某些内容,则必须是现有程序的代码或位于可执行内存中的代码。默认情况下,所有非程序代码的内存都是不可执行的。不过,Windows和Linux中有一些特殊功能可以更改内存区域的内存保护,并使其可执行或可写