【问题标题】:How to view the value located in the DS segment via OllyDbg如何通过 OllyDbg 查看位于 DS 段中的值
【发布时间】:2015-07-08 23:48:55
【问题描述】:

我正在通过OllyDbg调试一个DLL,发现如下命令:

LEA ECX,DWORD PTR DS:[ECX+EDX+8771F681]

ECX90C85FFFEDX13F5A9CE,所以最终地址是0x90C85FFF + 0x13F5A9CE + 0x8771F681 = 0x12C30004E。不幸的是,我不知道如何查看位于该地址的值。 FPU 窗口中的 Ctrl-G 表示“指定地址上没有内存”。

提前致谢。

【问题讨论】:

  • 注意你有一个环绕,32位截断地址只是2C30004E。也许你会有更好的运气。
  • ...或使用您的有效地址计算。
  • 顺便说一句:如果 DS 不指向线性内存,那么 DS 寄存器的值在这种情况下对您没有帮助。
  • @Jester 感谢您的回答,但无论如何也无济于事——地址仍然无法找到
  • @Martin Rosenau 你能给我更多的信息吗?

标签: assembly x86 reverse-engineering ollydbg


【解决方案1】:

请记住,LEA 可用于任何计算,而不仅仅是地址(计算的实际结果永远不会被访问/取消引用)。此外,段覆盖对计算没有影响。

  • ecx = 0x402000 ; ebx = 0x20 ; FS 段前缀覆盖(FS 基数 = 0x7FFDD000)
  • mov ecx, [ecx+ebx-4] ; 结果 = ecx = 0x40201c

为了快速检查地址是否被映射,在 OllyDbg 中,您可以在一条指令处停止并检查 CPU 窗口和转储窗口之间的迷你窗口:

Address=XXXX 行表示计算的结果(在实际执行指令之前)。如果您右键单击此行,您可能会看到一个弹出窗口:

  • 如果地址映射到进程地址空间,那么您会在弹出菜单上看到Follow in Dump 条目。
  • 如果地址未映射,则弹出菜单不会显示Follow in dump 条目。

注意:OllyDbg(至少 v2)会将映射的内核地址视为已映射,尽管它们显然无法从用户空间访问。因此,如果 MSB 设置在地址中,则将其视为未映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2011-04-19
    • 2016-01-18
    相关资源
    最近更新 更多