为调试的线程调用GetThreadContext时获取0x3e6

时间:2019-06-09 16:37:28

标签: windows debugging winapi cpu-registers masm32

我正在为Windows构建一个简单的调试器。我想在遇到断点后显示调试对象的寄存器上下文,但是当我调用GetThreadContext时,会得到:

ERROR_NOACCESS

998 (0x3E6)

Invalid access to memory location.

我正在使用masm32和ml编译器(在visual-studio 2019下)

这是我的相关代码:

.data
 context CONTEXT <?>
 pi PROCESS_INFORMATION <?>
 debug_event DEBUG_EVENT <?> 

...

.code
...
invoke CreateProcess,  NULL, addr command.command, NULL, NULL, FALSE, DEBUG_PROCESS, NULL,NULL, addr starti, addr pi


...

mov context.ContextFlags, CONTEXT_ALL

invoke GetThreadContext, pi.hThread, offset context

我试图:

  1. 玩弄标志(CONTEXT_ALL,CONTEXT_FULL)
  2. 通过debug_event结构获取hThread arg,就像这样

     invoke GetThreadContext, debug_event.u.CreateProcessInfo.hThread, addr context   
    

但是我仍然遇到完全相同的错误。

任何帮助将不胜感激!

Omer

0 个答案:

没有答案