通常Dll页面是PAGE_EXECUTE_WRITECOPY属性。 参考MSDN对其说明: Enables execute, read, and write access to the committed region of image file code pages. The pages are sharedread-on-write andcopy-on-write.
引用 15 楼 hlq83 的回复:应该只有一份,只是一些全局变量在每个进程中有副本。 有的代码改的不是变量 改的就是活生生的代码 如果我在一个进程里把kernal32.dll里的CreateProcess这个函数的代码给改了, 如果物理内存里只有一份kernal32.dll,那所有进程执行CreateProcess这个函数,执行的就是错的!
兔子也不是这样说吧 楼主想问的应该是当前内存。你说的那样改的话,要重启才行了。 还有进程刚加载的时候,代码段也就只有一份在物理内存中,就算是每个进程都要加载这个dll 那像15楼说的改入口点。这里有一个机制,写时复制,copy-on-write,你一改的话,这时候系统就单独给你copy一块出来了。这样你的修改影响不了别人。 这是我的理解。。。。希望没误导别人或者兔子再补充,我知道兔子对底层功力很深厚的,哈
应该只有一份,只是一些全局变量在每个进程中有副本。
既然是拷贝过来了,还可以说物理内存里只有一份吗?
15,471
社区成员
49,182
社区内容
加载中
试试用AI创作助手写篇文章吧