如何在Visual Studio调试器中查看段偏移内存地址?

3

我正在调试一些反汇编代码(没有源代码可用),其中有许多指令通过ds段寄存器访问数据,例如:

66 3B 05 8A B1 43 00 cmp         ax,word ptr ds:[43B18Ah]

你如何让Visual Studio调试器告诉你ds段寄存器的偏移量,以便我可以检查这个寄存器所引用的内存?Watch窗口似乎不接受像ds:[0x43B18A]或变体这样的表达式;它会告诉我ds是0,但这并不能告诉我0段的偏移量是多少。
是否有一些特殊的语法来实现这个功能,或者这是VS无法做到的?使用其他调试器(如WinDbg或ntsd)会更好吗?

2
你使用WinDbg、Olly、PE Explorer甚至IDA Pro会更加幸运。 - t0mm13b
1个回答

5

这是Visual Studio内置反汇编器的一个怪癖。它是多余的,DS寄存器是默认值。在Windows上,DS、CS和ES寄存器被设置为相同的值。这是受保护模式选择器。Memory窗口也使用相同的值。只需省略ds:前缀即可。


谢谢,我不知道为什么我没有想到这么简单的方法。我知道段寄存器用于DLL相关的东西,所以我认为它可能指向DLL的数据段之类的东西。 - Adam Rosenfield
1
@AdamRosenfield:除了FS和/或GS段以外,所有段都有一个基础值为0。不仅是相同的值,而且还有一个简单的平面内存模型,其中地址的偏移部分是唯一的非零部分。在像Windows这样的正常主流操作系统下,使用gs:段基址的线程本地存储是您唯一需要考虑访问实际发生在线性虚拟地址空间中的位置的时间。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接