Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GetThreadContext寄存器始终返回0xCCCC_C++_Windows_Winapi_Msdn - Fatal编程技术网

C++ GetThreadContext寄存器始终返回0xCCCC

C++ GetThreadContext寄存器始终返回0xCCCC,c++,windows,winapi,msdn,C++,Windows,Winapi,Msdn,我试图利用GetThreadContext查看当前调试寄存器的设置。无论我调试什么程序,它都返回0xCCCC。我能够成功地设置断点ctx.Dr0,然后使用自定义异常处理程序捕获这些断点,但是如果我尝试查看存储在ctx.Dr0的地址,它总是显示为0xCCCC。为什么呢 谢谢 CONTEXT ctx; GetThreadContext(GetCurrentThread(),&ctx); cout << hex << ctx.Eip <&l

我试图利用GetThreadContext查看当前调试寄存器的设置。无论我调试什么程序,它都返回0xCCCC。我能够成功地设置断点ctx.Dr0,然后使用自定义异常处理程序捕获这些断点,但是如果我尝试查看存储在ctx.Dr0的地址,它总是显示为0xCCCC。为什么呢

谢谢

    CONTEXT ctx;
    GetThreadContext(GetCurrentThread(),&ctx);
    cout << hex << ctx.Eip << endl;
CONTEXT-ctx;
GetThreadContext(GetCurrentThread(),&ctx);

无法为正在运行的线程获取有效的上下文。您需要挂起要获取上下文的线程。因此,在当前线程中尝试这样做是行不通的。文件中明确说明了这一点:

无法为正在运行的线程获取有效的上下文。在调用GetThreadContext之前,请使用SuspendThread函数挂起线程

如果为当前线程调用GetThreadContext,函数将成功返回;但是,返回的上下文无效。


在64位平台上,您可以使用。但是,这不适用于32位平台,因此您需要一个不同的解决方案。一种可能的方法是使用本文所述的汇编


哦,我自己编辑了MSDN页面的链接。。。干得好,雷米;)当您不检查winapi函数的返回值是否有错误时,就会发生这种情况,您只是不知道为什么它不起作用。
CONTEXT Context;
ZeroMemory( &Context, sizeof( CONTEXT ) );
Context.ContextFlags = CONTEXT_CONTROL;

__asm
{
Label:
  mov [Context.Ebp], ebp;
  mov [Context.Esp], esp;
  mov eax, [Label];
  mov [Context.Eip], eax;
}