我写了一个程序,向IE8远程注入一个DLL,采用的是CreateRemoteThread+LoadLibrary的方式。
我在注入的dll中声明了一个有虚函数的类,并且定义了这个类的一个全局静态对象。当远程注入时,dllmain函数中创建了一个新的有消息循环的线程。
问题在于,在某些XP+IE8的机器中,当我在新线程中调用全局静态对象的虚方法时发生Access violation,崩溃。
大部分机器都完全没有问题。同时,还有一些机器,当我使用windebug open exectable打开IE8时,进程发生上面的崩溃,如果不使用windebug,则正常。
而且,当我将全局静态变量在dllmain中new出来,全局仅保存对象指针,则正常。
这种诡异现象不知道是否有高手可以指点迷津!
我在注入的dll中声明了一个有虚函数的类,并且定义了这个类的一个全局静态对象。当远程注入时,dllmain函数中创建了一个新的有消息循环的线程。
问题在于,在某些XP+IE8的机器中,当我在新线程中调用全局静态对象的虚方法时发生Access violation,崩溃。
大部分机器都完全没有问题。同时,还有一些机器,当我使用windebug open exectable打开IE8时,进程发生上面的崩溃,如果不使用windebug,则正常。
而且,当我将全局静态变量在dllmain中new出来,全局仅保存对象指针,则正常。
这种诡异现象不知道是否有高手可以指点迷津!
有没有用VirtualAllocEx在无端进程空间为dll文件名分配空间?
还有,为什么用 全局静态对象?