如何确定近指针的隐式片段寄存器?
-
04-10-2019 - |
题
在第4.3节中 Intel64®和IA-32体系结构软件开发人员手册。第1卷:基本体系结构, , 它说:
几乎指针是一个32位偏移量...在一个细分市场中。在平面内存模型中或在分段模型中使用的所有内存参考都用于近乎指针,其中暗示了所访问的段的身份。
这使我想知道:如何确定隐含的细分寄存器?
我知道 (%eip)
并流离失所 (%eip)
(例如 -4(%eip)
)地址使用 %cs
默认情况下, (%esp)
并流离失所 (%esp)
地址使用 %ss
, , 但是关于 (%eax)
, (%edx)
, (%edi)
, (%ebp)
等等,并且隐式段寄存器还可以依赖于内存地址操作数出现的指令吗?
解决方案
以外 CS
和 SS
您提到的注册访问,大多数其他访问将使用 DS
细分寄存器。我可以记得的几个例外:
- 面向弦的指令将使用
ES
对于“目的地”(由EDI
登记册)登记册 - 使用的内存访问
EBP
注册为“基础地址”寄存器将使用SS
细分寄存器。但是,如果EBP
寄存器用作缩放索引寄存器,所使用的段将是DS
(除非基本地址登记册ESP
)
不隶属于 StackOverflow