OpenGL调用锁定/冻结

时间:2010-02-16 15:27:01

标签: c++ c opengl assembly

我正在使用一些戴尔工作站(运行WinXP Pro SP 2和DeepFreeze)进行开发,但有些东西被重新加载到这些机器上,以防止任何opengl调用(调用锁)完成(我知道代码的工作方式是我已经在'干净'的机器上测试了它,我还测试了dev-cpp生成的简单opengl应用程序,它也会锁定dell机器。)

我试图调试我自己的应用程序以查看gl调用冻结的确切位置,但ZwQueryInformationProcess上有一些全局系统挂钩会混淆对ZwQueryInformationThread(由ExitThread使用)的调用,从而阻止我进行调试(它会导致调试器OllyDBG进入访问冲突报告循环或程序崩溃(如果传递异常)。 钩子:

ntdll.ZwQueryInformationProcess 7C90D7E0       B8 9A000000          MOV EAX,9A
7C90D7E5                                       BA 0003FE7F          MOV EDX,7FFE0300
7C90D7EA                                       FF12                 CALL DWORD PTR DS:[EDX]
7C90D7EC                                     - E9 0F28448D          JMP 09D50000
7C90D7F1                                       9B                   WAIT
7C90D7F2                                       0000                 ADD BYTE PTR DS:[EAX],AL
7C90D7F4                                       00BA 0003FE7F        ADD BYTE PTR DS:[EDX+7FFE0300],BH
7C90D7FA                                       FF12                 CALL DWORD PTR DS:[EDX]
7C90D7FC                                       C2 1400              RETN 14
7C90D7FF                                       90                   NOP
ntdll.ZwQueryInformationToken 7C90D800         B8 9C000000          MOV EAX,9C

混乱的功能+通话:

ntdll.ZwQueryInformationThread 7C90D7F0        8D9B 000000BA        LEA EBX,DWORD PTR DS:[EBX+BA000000]
7C90D7F6                                       0003                 ADD BYTE PTR DS:[EBX],AL
7C90D7F8                                       FE                   ???                                                          ; Unknown command
7C90D7F9                                       7F FF                JG SHORT ntdll.7C90D7FA
7C90D7FB                                       12C2                 ADC AL,DL
7C90D7FD                                       14 00                ADC AL,0
7C90D7FF                                       90                   NOP
ntdll.ZwQueryInformationToken 7C90D800         B8 9C000000          MOV EAX,9C

首先,任何人都知道如果有什么事情会导致OpenGL调用导致无限锁定,如果有任何方法可以解决它?什么会在内核内存中创建这样的钩子?

更新:经过一些更多的摆弄,我发现了更多的内核钩子,其中很多用于取消系统信息调用返回的数据(如远程调试端口),我还设法找出了什么从来没有这样做是使用madchook.dll(通过madshi)来做到这一点,这个dll也被注入到每个正在运行的进程中(这些似乎是一些反调试代码)。另外,在OpenGL方面,似乎Direct X很好/不受影响(我没有遇到问题就运行了一个DX 9演示版),那么这些内核钩子中的一个会不会影响OpenGL?

2 个答案:

答案 0 :(得分:1)

经过一些研究,似乎有一些东西主动阻止用户 - >内核模式调用OGL,可能是DeepFreeze的一个选项。 DirectX虽然完美无缺,但我已经切换到了。

答案 1 :(得分:0)

这闻起来像是一些恶意软件试图隐藏在你的系统上(并且弄错了)。您是否尝试使用最新的防病毒扫描系统?

编辑:快速Google搜索madchook.dll显示它被各种间谍软件/拨号程序/其他恶意软件使用。请尽快运行防病毒软件。