小弟我在网络上搜寻的许久,结果都显示了DLL可以节省内存的使用,多个执行序可
以同时使用单一DLL来共用内存里DLL的单一复本。也就是说一个执行序一但加载了
一个DLL,那个DLL就不必再次加载内存,就算其他的执行序呼叫LoadLibrary()等
函数加载该DLL档,也只是把计次变量+1,并不会做重复加载DLL的动作,直到执行
序退出,或者使用VirtualFree等函数,才会将该DLL档从内存卸载。(以上是小弟
我的理解,不知道有没有错)
但是,今天我写了一个小程式他会HOOK"User32.dll"里面的FindWindowExW()函数,
使用Inline Hook的方法,将该API的开头5个BYTES改成JMP XXXXXXXX,其中XXXXXXXX
是与我自己写的HOOK函数偏移,照刚刚的逻辑,是否我HOOK了一次FindWindowExW函数,
然后所有加载User32.dll的程序,里面的FindWindowExW函数的开头,都被我更改了呢?
为了验证,我又写了一个小程式,里面加载了User32.dll,并且让两个程式同时运行,
然后使用OllyDbg分别加载两个程式,观察FindWindowExW的开头,发现两个程式的
FindWindowExW函数并不相同,一个受到了我的更改,另一个则是维持原状是
mov edi,edi
push ebp...
请问这是什么原因?是我在DLL档的机制上理解有错误,还是我在系统内存的管理
理解上有错误?希望各位高手提点一下!!谢谢!!