首页
社区
课程
招聘
关于Win调试API问题
发表于: 2005-6-14 19:09 5537

关于Win调试API问题

2005-6-14 19:09
5537
调试循环如下:

DEBUG_EVENT de;
CONTEXT conText;
BOOL bContinue = TRUE;
DWORD dwEntryAddr = 0;
while( 1 )
{
    bContinue = WaitForDebugEvent( &de, INFINITE );
    switch( de.dwDebugEventCode )
    {
        ......
        case CREATE_PROCESS_DEBUG_EVENT:
        {
            dwEntryAddr = (DWORD)de.u.CreateProcessInfo.lpStartAddress;
            conText.ContextFlags = CONTEXT_FULL;
            GetThreadContext( de.u.CreateProcessInfo.hThread, &conText );
            // 请问这里是不是dwEntryAddr应该和conText.Eip相等?因为我的这两个值相差很远,是不是哪里出错了?            
            break;
        }
        ......
    }
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
2
在使用GetThreadContext之前必须要SuspendThread挂起目标线程。
否则线程有可能被调度,线程环境也就会改变。

另外根据MSDN   dwEntryAddr和conText.Eip 应该是相同或者相差不远。

lpStartAddress :
Pointer to the starting address of the thread. This value may only be an approximation of the thread's starting address, because any application with appropriate access to the thread can change the thread's context by using the SetThreadContext function.
2005-6-16 19:31
0
雪    币: 200
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢"北极星2003",按照你说的,问题已经解决了,在CREATE_PROCESS_DEBUG_EVENT事件中,写入一个int 3中断,这样就可以在中断调试中进入正常的入口地址。
2005-6-18 12:19
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
4
2005-6-18 17:52
0
游客
登录 | 注册 方可回帖
返回
//