【问题标题】:How do you view segment-offset memory addresses in the Visual Studio debugger?如何在 Visual Studio 调试器中查看段偏移内存地址?
【发布时间】:2011-04-09 08:21:53
【问题描述】:

我正在从反汇编中调试一些代码(没有可用的源代码),并且有许多指令通过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)会不会更好?

【问题讨论】:

  • 使用 WinDbg、Olly 或 PE Explorer 甚至 IDA Pro 会更好...

标签: visual-studio debugging x86 disassembly memory-segmentation


【解决方案1】:

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

【讨论】:

  • 谢谢,我不知道为什么我没有想到这么简单的事情。我知道段寄存器用于 DLL 相关的东西,所以我认为它可能指向 DLL 的数据段或其他东西。
  • @AdamRosenfield:除 FS 和/或 GS 之外的所有段的基数为 0。不仅是相同的值,而且是一个简单的平面内存模型,其中地址的偏移部分是唯一的非零部分。使用gs: 段基的线程本地存储是您唯一应该想知道访问实际发生在线性虚拟地址空间中的哪个位置,在像 Windows 这样的普通主流操作系统下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多