【发布时间】:2021-03-24 22:36:45
【问题描述】:
我有一个显示以下异常信息的故障转储:
0:000> .ecxr
eax=00000000 ebx=00000001 ecx=000000dc edx=000032f0 esi=00000020 edi=78746341
eip=00000000 esp=00000007 ebp=00000020 iopl=0 nv up di pl nz na po cy
cs=0014 ss=0034 ds=0000 es=1000 fs=df5c gs=0000 efl=00000001
0014:00000000 ?? ???
为什么例外地址显示为0014:00000000,而不仅仅是00000000?据我了解,0014 是代码段,但我没有找到任何有关语法的文档。
另外,有没有办法将此语法转换为简单的绝对地址?
【问题讨论】:
-
是的,冒号之前的部分是段,之后的部分是偏移量(在这种情况下是EIP)。
-
通常在 32 位代码中,代码段的段基数为 0。除非您有其他证据,否则您应该继续该假设。所以线性地址是 0。地址 0 通常不会映射到任何地址空间,这就解释了崩溃。 (如果你有理由认为它不是 0,Windbg 可能会告诉你第 14 段的真实段基数。)
标签: x86 windbg memory-address memory-segmentation