内存模块是否映射到进程的虚拟空间?

Joh*_*ing 2 c++ windows debugging memory-management

我看到在Windows上,函数EnumProcessModules返回为指定进程加载的一些模块(其中一些应该是系统dll,如guard32.dll,version.dll等).

我的问题是:这些模块是否映射到流程的虚拟空间?我可以从主应用程序代码跳转到其中一个模块(当然知道地址)的指令吗?

Mat*_*son 5

是的,DLL应该映射到进程虚拟地址空间.如果该页面中的代码尚未执行,则映射可能无法由真实物理页面支持,当然,如果没有正确的初始化或设置以使代码正确执行(例如调用处理函数),则执行"随机"位代码那些使用一些需要在另一个函数中分配的数据)在一些不好的定义中会明显地结束.还要记住,DLL可能会在运行相同代码等的不同时间加载到不同的地址,因此您不能依赖DLL的地址是恒定的 - 并且它可能在另一台机器中完全不同.