【发布时间】:2011-11-18 00:22:02
【问题描述】:
我正在尝试在 windows7 64 位上获取另一个进程的 EBP 寄存器的值。
为此,我正在使用 GetThreadContext,如下所示:
static CONTEXT threadContext;
memset(&threadContext, 0, sizeof(CONTEXT));
threadContext.ContextFlags = CONTEXT_FULL;
bool contextOk = GetThreadContext(threadHandle, &threadContext);
EIP 值似乎没问题,但 EBP = 0。 我也尝试使用 WOW64_GetThreadContext 但它没有帮助...... GetLastError() 返回 0 所以应该没问题。 我确实使用 SuspendThread 暂停了该线程,并且每次对线程进行采样时都不会发生这种情况。
这是什么原因造成的?
【问题讨论】:
-
您知道“您无法为正在运行的线程获取有效的上下文。在调用
GetThreadContext之前,请使用SuspendThread函数挂起线程。”? MSDN -
既然你已经暂停了进程(或者至少是线程),也许你可以给它附加一个真正的调试器,看看它说EBP是什么。
-
我刚刚尝试过,但显然 VS express 无法附加到暂停或已调试的进程:/
标签: c++ windows threadcontext