E86和其他注册表在x86进程中的位置

0 memory x86 eip

我正在使用x86指令,现在我很困惑:

x86寄存器(如:EIP,ESP等)存储在哪里?!例如,当我使用ollydbg时,我可以看到实际的EIP寄存器值是什么以及它是如何变化的.

如果它存储在内存中的实际位置?(例如.data .text或.bss)

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

Mar*_*ler 5

你对寄存器的含义有严重的误解.

寄存器实际上是寄存器,即.处理器中的一小块内存,可以包含操作数,也可以是CPU指令的目标.它在内存中没有地址 - 它就像寄存器一样真正可以加入.

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

因此,没有"特定于进程"的寄存器.每个CPU内核都有一组寄存器(一些特殊功能,如虚拟化),还有一些机制可以将寄存器存储在RAM中,并从RAM中恢复,例如在调用函数或切换上下文时.