我LoadLibrary 之后挂完钩子之后就已经马上FreeLibrary了[/quote]
不能马上FreeLibrary的,挂完钩子,你用于替换的函数都是在dll里的吧,你FreeLibrary之后,这些函数不就失效了么,达不到效果。如果这些函数是频繁使用的,那么你调用FreeLibrary时,由于dll中的函数正在使用中,那么FreeLibrary就会失败。
如果是FreeLibrary失败,可以用FreeLibraryAndExitThread强制退出。但也是要在,你不想再hook函数的时候调用,不然不仅hook也随之结束,被hook的进程可能也会立即崩溃。[/quote]
但是我一直都是hook 之后就 freelibrary ,dll是有注入到程序中的,也运行正常,[/quote]
freelibrary失败了呗,自己看返回值吧。[/quote]
freelibrary 返回值是 1 是成功的
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
[/quote]
用这个试试吧,FreeLibraryAndExitThread。FreeLibrary即使成功了,也只是引用计数减一,如果使用的线程不退出,不会真正的卸载的。[/quote]
你之前说的保存挂钩LoadLibrary 的那个dll handle ,在卸载钩子之后再去freelibrary 的方法我有试过了,但是效果跟LoadLibrary 之后 立即FreeLibrary 是一样的,
所以感觉应该就是hiroyukki说的情况[/quote]
随你了,但建议你还是把我好好看看,感觉你根本没仔细看。[/quote]
为何你会这么说?你的回答都没法解决问题
FreeLibraryAndExitThread 这个函数我也查了,只是在dll有启动线程的时候才需要
而且我这边根本不存在引用计数的问题,LoadLibrary 都是对应一个FreeLibrary
我LoadLibrary 之后挂完钩子之后就已经马上FreeLibrary了[/quote]
不能马上FreeLibrary的,挂完钩子,你用于替换的函数都是在dll里的吧,你FreeLibrary之后,这些函数不就失效了么,达不到效果。如果这些函数是频繁使用的,那么你调用FreeLibrary时,由于dll中的函数正在使用中,那么FreeLibrary就会失败。
如果是FreeLibrary失败,可以用FreeLibraryAndExitThread强制退出。但也是要在,你不想再hook函数的时候调用,不然不仅hook也随之结束,被hook的进程可能也会立即崩溃。[/quote]
但是我一直都是hook 之后就 freelibrary ,dll是有注入到程序中的,也运行正常,[/quote]
freelibrary失败了呗,自己看返回值吧。[/quote]
freelibrary 返回值是 1 是成功的
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
[/quote]
用这个试试吧,FreeLibraryAndExitThread。FreeLibrary即使成功了,也只是引用计数减一,如果使用的线程不退出,不会真正的卸载的。[/quote]
你之前说的保存挂钩LoadLibrary 的那个dll handle ,在卸载钩子之后再去freelibrary 的方法我有试过了,但是效果跟LoadLibrary 之后 立即FreeLibrary 是一样的,
所以感觉应该就是hiroyukki说的情况[/quote]
随你了,但建议你还是把我好好看看,感觉你根本没仔细看。
我LoadLibrary 之后挂完钩子之后就已经马上FreeLibrary了[/quote]
不能马上FreeLibrary的,挂完钩子,你用于替换的函数都是在dll里的吧,你FreeLibrary之后,这些函数不就失效了么,达不到效果。如果这些函数是频繁使用的,那么你调用FreeLibrary时,由于dll中的函数正在使用中,那么FreeLibrary就会失败。
如果是FreeLibrary失败,可以用FreeLibraryAndExitThread强制退出。但也是要在,你不想再hook函数的时候调用,不然不仅hook也随之结束,被hook的进程可能也会立即崩溃。[/quote]
但是我一直都是hook 之后就 freelibrary ,dll是有注入到程序中的,也运行正常,[/quote]
freelibrary失败了呗,自己看返回值吧。[/quote]
freelibrary 返回值是 1 是成功的
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
[/quote]
用这个试试吧,FreeLibraryAndExitThread。FreeLibrary即使成功了,也只是引用计数减一,如果使用的线程不退出,不会真正的卸载的。[/quote]
你之前说的保存挂钩LoadLibrary 的那个dll handle ,在卸载钩子之后再去freelibrary 的方法我有试过了,但是效果跟LoadLibrary 之后 立即FreeLibrary 是一样的,
所以感觉应该就是hiroyukki说的情况
我LoadLibrary 之后挂完钩子之后就已经马上FreeLibrary了[/quote]
不能马上FreeLibrary的,挂完钩子,你用于替换的函数都是在dll里的吧,你FreeLibrary之后,这些函数不就失效了么,达不到效果。如果这些函数是频繁使用的,那么你调用FreeLibrary时,由于dll中的函数正在使用中,那么FreeLibrary就会失败。
如果是FreeLibrary失败,可以用FreeLibraryAndExitThread强制退出。但也是要在,你不想再hook函数的时候调用,不然不仅hook也随之结束,被hook的进程可能也会立即崩溃。[/quote]
但是我一直都是hook 之后就 freelibrary ,dll是有注入到程序中的,也运行正常,[/quote]
freelibrary失败了呗,自己看返回值吧。[/quote]
freelibrary 返回值是 1 是成功的
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
[/quote]
用这个试试吧,FreeLibraryAndExitThread。FreeLibrary即使成功了,也只是引用计数减一,如果使用的线程不退出,不会真正的卸载的。
我LoadLibrary 之后挂完钩子之后就已经马上FreeLibrary了[/quote]
不能马上FreeLibrary的,挂完钩子,你用于替换的函数都是在dll里的吧,你FreeLibrary之后,这些函数不就失效了么,达不到效果。如果这些函数是频繁使用的,那么你调用FreeLibrary时,由于dll中的函数正在使用中,那么FreeLibrary就会失败。
如果是FreeLibrary失败,可以用FreeLibraryAndExitThread强制退出。但也是要在,你不想再hook函数的时候调用,不然不仅hook也随之结束,被hook的进程可能也会立即崩溃。[/quote]
但是我一直都是hook 之后就 freelibrary ,dll是有注入到程序中的,也运行正常,[/quote]
freelibrary失败了呗,自己看返回值吧。[/quote]
freelibrary 返回值是 1 是成功的
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.