pwxwabcd / np-activex

Automatically exported from code.google.com/p/np-activex
1 stars 0 forks source link

调用的ACTIVEX的控件退出时CHROME报内存访问异常0xC0000005 #91

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
ACTIVEX的控件在退出时有可能会调用OutPutDebugString,我查看了��
�码发现np-activex在初始化时会HOOK系统处理异常的API,而在退��
�时没有UNHOOK该API,这时如果有地方发生异常,就会跑到不存�
��的代码处执行导致内存访问异常的出现。

Original issue reported on code.google.com by yeahokhe...@gmail.com on 1 Mar 2012 at 2:55

GoogleCodeExporter commented 9 years ago
对系统API的hook是仅对当前进程有效的。而chrome的沙盒使这个�
��程只会运行这个扩展。
退出时的异常是偶然出现,不是必然。

目前我认为是某个对象的引用计数存在问题,但是找不到是��
�个对象。而且chrome对引用计数的操作也有bug,不同版本有时�
��为也会不同。在进程结束时,某个容器会试图再release某个��
�经被delete的对象,然后出现了错误。由于此时的栈已经被破�
��,所以还没查出是哪里的问题。应该是某个应该AddRef时没add
导致的。

Original comment by qiu...@gmail.com on 1 Mar 2012 at 3:01

GoogleCodeExporter commented 9 years ago

Original comment by qiu...@gmail.com on 1 Mar 2012 at 3:01

GoogleCodeExporter commented 9 years ago
1.4.3修复了两个可能导致崩溃的错误,如果那个网站容易导致
这个崩溃,最好把网址给我

Original comment by qiu...@gmail.com on 6 Mar 2012 at 7:45

GoogleCodeExporter commented 9 years ago
先前我没把问题说详细,在NP_Initialize里调用了InstallAtlThunkEnum
eration(true),在InstallAtlThunkEnumeration(true)函数里HOOK了函数KiUserE
xceptionDispatcher,这是系统处理异常的API,HOOK了该API后,在系�
��调用KiUserExceptionDispatcher时首先会进入到np-activex模块的HOOK后
的新函数里执行。

OutPutDebugString这个API是使用异常的方式触发内核功能的,也就
是说调用OutPutDebugString会触发调用函数KiUserExceptionDispatcher。

np-activex没有在NP_Shutdown时调用InstallAtlThunkEnumeration(false)来UNHOO
K函数KiUserExceptionDispatcher。如果有模块在np-activex退出后再调��
�OutPutDebugString或是任何可能导致异常的行为(比如引发一个TR
Y 
CATCH异常)都会导致调用KiUserExceptionDispatcher到已经卸载的np-ac
tivex模块里的HOOK后的函数里执行,后果是不可知的,不过一��
�情况下是内存访问异常。

Original comment by yeahokhe...@gmail.com on 22 Mar 2012 at 1:52

GoogleCodeExporter commented 9 years ago
我在某一个版本已经加入了unhook。就是不知道还有没有退出��
�崩溃的情况。

Original comment by qiu...@gmail.com on 22 Mar 2012 at 1:59

GoogleCodeExporter commented 9 years ago
在相同情况下已经不再崩溃,感谢修正。

Original comment by yeahokhe...@gmail.com on 26 Mar 2012 at 12:26