堆栈中的前 16 个字节代表什么?

逆向工程 视窗 ollydbg 调试器 x86 调用栈
2021-06-25 11:33:03

每当我在 Windows 7 64 位机器上的 OllyDbg v1.10 中附加一个进程时,我注意到堆栈中第一个保存的 EBP 并不指向堆栈的最底部。相反,它指向它之前的 16 个字节。

为了说明我的意思,请参见以下屏幕截图: OllyDbg 堆栈窗口的屏幕截图

位于 正上方的 EBP(以灰色突出显示)RETURN to ntdll.76FC9F45指向1B05FFEC请注意,此地址以EC, 而非结尾FC

问题 1:为什么 EBP 不指向1B05FFFC

问题 2:堆栈中的前 16 个字节代表什么?

问题 3:对于 Windows 操作系统,StackBase第一个EBP指向的地址之间的字节数 (16) 是否固定?

1个回答

问题 1:为什么 EBP 不指向1B05FFFC

因为1B05FFFC不是栈帧的基地址。

OllyDbg1B05FFFC在堆栈视图中显示为最后一个地址的唯一原因是它是堆栈内存页中最后一个 DWORD 的地址。

问题 2:堆栈中的前 16 个字节代表什么?

这取决于调试器。

例如,从我有限的测试...

在 Windows 7 x64 上将 WinDbg 附加到 32 位 EXE 时,[ESP]返回地址是ntdll!DbgUiRemoteBreakin从对ntdll!DbgBreakPoint.

当将 OllyDbg v2.01 附加到 Windows 7 x64 或 Windows 7 x86 上的 32 位 EXE 时,调试器在执行调试对象线程的中间挂起被调试对象,因此OllyDbg的值ESPESP当前调试对象线程中的任何附在它上面。