能力值:
( LV2,RANK:10 )
|
-
-
2 楼
遇到同样的问题了 没找到办法 帮你顶一下 等待高手出现
|
能力值:
( LV12,RANK:250 )
|
-
-
3 楼
会不会是 正在使用中 呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我调试过了,当我点UNHOOK之后,出错地点是我的DLL中的Mysend,Mysendto之类的函数可那时我已还原了原来函数的代码即在DllMain中
case DLL_PROCESS_DETACH:
API[0].SetHookOff();
API[1].SetHookOff();
API[2].SetHookOff();
API[3].SetHookOff();
API[4].SetHookOff();
API[5].SetHookOff();
API[6].SetHookOff();
API[7].SetHookOff();
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
如下一段代码:
API[1].SetHookOff();
ret=::recv(s,buf,len,flags);
API[1].SetHookOn();
//----------
recv为阻塞函数,当你在你的dll卸载之前调用了recv的时候,它的顺序是
recv-〉myrecv-〉recv
recv接收到数据返回的时候肯定先进入到myrecv函数,因为它后面还有一些工作要做如API[1].SetHookOn();
而当它返回的时候你已经释放了DLL的话,那它进入的将是一个无效的地址区间。
这样不崩溃倒显得有些不正常了。
|
能力值:
( LV12,RANK:250 )
|
-
-
6 楼
[QUOTE=龙星;504999]如下一段代码:
API[1].SetHookOff();
ret=::recv(s,buf,len,flags);
API[1].SetHookOn();
//----------
recv为阻塞函数,当你在你的dll卸载之前调用了recv的时候,它的顺序是
recv-〉myrecv-〉...[/QUOTE]
有道理!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
谢谢各位的回复
但是我还有几个疑问
如果recv或recvfrom函数阻塞,那么它还回下一个该执行的函数应该是SetHookOn
而程序崩溃却位于Mysend或Mysendto的第一条指令,即相对地址0x00001041处
所以在卸过之后send函数的头几个字节并没又被改掉致使它跳到Mysend处执行而此时
这个地址已没在内存了。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
将dll从进程模块列表中移除并保持正常运行
http://hi.baidu.com/zxhouse/blog/item/dc651c90fc7a398fa977a484.html
看看是不是和这个有关系 楼主解决后 不要忘记分享下经验呀:)
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
有不有高手在?麻烦帮我帮我改一下。这个程序的错误搞了我一个月,把我头都弄晕了
|
|
|