Memory x86中EIP和其他寄存器的位置

Memory x86中EIP和其他寄存器的位置,memory,x86,cpu-registers,eip,Memory,X86,Cpu Registers,Eip,我正在使用x86指令,现在我对x86寄存器(如EIP、ESP等)的存储位置感到困惑 例如,当我使用ollydbg时,我可以看到实际的EIP寄存器值是多少以及它是如何变化的。 如果它们存储在内存中,那么实际位置在哪里?(例如在.data.text或.bss中) 我可以手动更改另一个进程的EIP吗?怎么做?您对寄存器是什么有着严重的误解 寄存器实际上是一个寄存器,即处理器中的一小段内存,可以包含操作数,也可以是CPU指令的目标。它在内存中没有地址——它实际上是可寻址的,就像寄存器一样 RAM是完全不

我正在使用x86指令,现在我对x86寄存器(如EIP、ESP等)的存储位置感到困惑

例如,当我使用ollydbg时,我可以看到实际的EIP寄存器值是多少以及它是如何变化的。
如果它们存储在内存中,那么实际位置在哪里?(例如在.data.text或.bss中)


我可以手动更改另一个进程的EIP吗?怎么做?

您对寄存器是什么有着严重的误解

寄存器实际上是一个寄存器,即处理器中的一小段内存,可以包含操作数,也可以是CPU指令的目标。它在内存中没有地址——它实际上是可寻址的,就像寄存器一样

RAM是完全不同的—x86程序完全可以在没有RAM的情况下工作,但没有任何操作不在寄存器上工作。例如,要添加RAM中某处的两个数字,您可以使用LOAD指令将这两个数字加载到两个寄存器中,然后使用一些add指令将一个数字添加到另一个数字中,以寄存器为目标,然后使用一些STORE指令获取寄存器值并将其写入RAM中的某个地址


因此,没有“进程特定”寄存器。每个CPU核心都有一组寄存器(一些特殊功能,如虚拟化无法承受),并且有一些机制可以将寄存器存储在RAM中,并从RAM中恢复它们,例如在调用函数或切换上下文时。

寄存器存储在寄存器中,而不是进程自己的内存中

调试器使用操作系统提供的特殊接口来更改正在运行的进程(包括EIP)的寄存器。在Linux中,它是最重要的

能够从进程外部更改进程的寄存器与操作系统如何将进程的体系结构状态保存到内存中以备将来使用有关