首页
社区
课程
招聘
[求助]dll中如何尽可能早的捕获宿主进程的退出时机
发表于: 2014-8-20 11:13 4697

[求助]dll中如何尽可能早的捕获宿主进程的退出时机

2014-8-20 11:13
4697
如题:
dll_process-detach有点晚了

另外想问下如果存在dll A跟dll B
是A的DLL_PROCESS_DETACH先被调用还是B的先被调用呢

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 459
活跃值: (398)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
HOOK 退出进程的API 不行么?
2014-8-20 11:44
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
挂了exitprocess但是发现还是不够早
2014-8-20 12:07
0
雪    币: 202
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
挂了exitprocess,然后栈回溯上去,挂钩上层的函数啊
2014-8-20 13:06
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
窗口程序还是控制台,窗口直接拦截消息 WM_CLOSE
2014-8-20 13:09
0
雪    币: 75
活跃值: (738)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
按初始化的顺序 调用

            Next = Peb->Ldr->InInitializationOrderModuleList.Blink;
            while ( Next != &Peb->Ldr->InInitializationOrderModuleList) {
                LdrDataTableEntry
                    = (PLDR_DATA_TABLE_ENTRY)
                      (CONTAINING_RECORD(Next,LDR_DATA_TABLE_ENTRY,InInitializationOrderLinks));

                Next = Next->Blink;

                //
                // Walk through the entire list looking for
                // entries. For each entry, that has an init
                // routine, call it.
                //

                if (Peb->ImageBaseAddress != LdrDataTableEntry->DllBase) {
                    InitRoutine = (PDLL_INIT_ROUTINE)LdrDataTableEntry->EntryPoint;
                    if (InitRoutine && (LdrDataTableEntry->Flags & LDRP_PROCESS_ATTACH_CALLED) ) {
                        if (LdrDataTableEntry->Flags) {
                            if ( LdrDataTableEntry->TlsIndex ) {
                                LdrpCallTlsInitializers(LdrDataTableEntry->DllBase,DLL_PROCESS_DETACH);
                                }

#if defined (WX86)
                            if (!Wx86ProcessInit ||
                                LdrpRunWx86DllEntryPoint(InitRoutine,
                                                        NULL,
                                                        LdrDataTableEntry->DllBase,
                                                        DLL_PROCESS_DETACH,
                                                        (PVOID)1
                                                        ) ==  STATUS_IMAGE_MACHINE_TYPE_MISMATCH)
#endif
                               {
                                LdrpCallInitRoutine(InitRoutine,
                                                    LdrDataTableEntry->DllBase,
                                                    DLL_PROCESS_DETACH,
                                                    (PVOID)1);
                                }

                            }
                        }
                    }
                }
2014-8-25 19:04
0
游客
登录 | 注册 方可回帖
返回
//