【问题标题】:Assembly stack index address汇编堆栈索引地址
【发布时间】:2012-01-07 15:48:28
【问题描述】:

我正在尝试使用 ollydbg 调试程序,但我对使用 SS 前缀索引模式地址有疑问。

截图如下:

此时,指令

MOV BYTE PTR SS:[EBP-1],BL

会将 8 位从 EBX 移至 EBP(0012FDCC) 指向的地址减去一 - 0012FDCB

如果以上不正确,请告诉我。

在 ollydbg 程序中,右下角有一个堆栈的表示,第一列是地址。为什么0012FDCB 没有入口,0012FDCB 指向哪里?

【问题讨论】:

    标签: assembly ollydbg addressing-mode


    【解决方案1】:

    我对ollydbg一无所知;希望熟悉它的人也能发布答案。

    你对你展示给我们的指令的理解大部分是正确的:它将 BL 的内容(即 EBX 的 8 位)移动到[EBP 减 1] 指向的堆栈段。如果 EBP 为 0012FDCCh,则该字节将存储在 0012FDCBh。

    我们通常不会说 0012FDCBh 指向任何地方,我们只是说它是一个内存位置,在这种情况下它包含一个字节,尽管从技术上说它是内存位置的地址会更正确,因此从某种意义上说,数字“指向”一个字节。但我们更愿意考虑指向内存的指针或寄存器,而不是纯数字。

    我不知道为什么 ollydbg 没有显示 0012FDCBh。你确定它没有显示吗?它可能显示 0012FDCCh 和 0012FDC8h 吗?如果是这样,那么它只是显示按 DWORD 分组的堆栈内存,因此 0012FDCBh 没有显示,因为它对应于 DWORD 中位于 0012FDC8h 的四个字节之一。查看存储在 0012FDC8h 中的 DWORD 值,单步执行 MOV 指令,您应该会看到该字的最高有效字节变为 BL 的值。 (如果该地址中的值与 BL 的值不同。)Ollydbg 也可能会显示按行分组的内存,而不是一个 DWORD,但同样的原则也适用。

    【讨论】:

    • andmart,看到截图后,看来发生的事情正是我的猜测。 ollydbg 以 DWORDS 显示堆栈的内容。所以,在 0012FDC8h 处查看 DWORD 的最高有效字节,BL 将存储在那里。
    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多