1

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

这是一个屏幕截图:

此时,指令

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

会将 8 位移至减去 1 后EBX指向的地址。EBP(0012FDCC)0012FDCB

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

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

4

1 回答 1

2

我对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,但同样的原则适用。

于 2012-01-07T16:07:58.860 回答