首页
社区
课程
招聘
同一时间内如果多个进程运行,他们的地址是如何安排的.
发表于: 2006-6-28 22:24 4338

同一时间内如果多个进程运行,他们的地址是如何安排的.

2006-6-28 22:24
4338
各位高手:
    WINDOWS是多任务操作系统,并且进程间的地址是相互隔离的.98系统为每个进程分配4MB-2G的用户空间.小弟看了一个修改内存的程序,我想问问,同一时间内如果多个进程运行,他们的地址是如何安排的.
BOOL FindFirst(DWORD dwValue)
{
        const DWORD dwOneGB = 1024*1024*1024;        // 1GB
        const DWORD dwOnePage = 4*1024;                // 4KB

        if(g_hProcess == NULL)
                return FALSE;
       
        // 查看操作系统类型,以决定开始地址
        DWORD dwBase;
        OSVERSIONINFO vi = { sizeof(vi) };
        ::GetVersionEx(&vi);
        if (vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
                dwBase = 4*1024*1024;                // Windows 98系列,4MB       
        else
                dwBase = 640*1024;                // Windows NT系列,64KB

        // 在开始地址到2GB的地址空间进行查找
        for(; dwBase < 2*dwOneGB; dwBase += dwOnePage)
        {
                // 比较1页大小的内存
                CompareAPage(dwBase, dwValue);
        }

        return TRUE;
}
对于同个地址空间如0X1234,系统是如何判断属于那个进程的呢?
进程地址间相互隔离,是为每个进程都安排2G的用户空间吗?如果是那么各进程间的地址是如何安排的?
谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
补充一下:该程序是修改游戏内存的一个部分,但是小弟发现为什么每个进程都是从相同的DWBASE基地址开始找起,如果同时运行2个游戏那么只靠游戏进程句柄来区分不同游戏吗?但是为什么都是从相同的基地址开始找起呢?相同的地址能存不同进程的数据????如果能那么系统如何判断其归属进程?
2006-6-28 22:50
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
3
进程的地址空间是虚拟的,只有当使用某个地址时才提交物理存储器,很难用几句话讲清楚,建议看些Windows内存管理的资料

另外,对于类似的问题,不要开多个主题,警告一次
2006-6-29 00:30
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
4
建议楼主看《Undocumented Windows NT》内存管理部分。分页机制导致了这种结果。根源就在CR3寄存器。
2006-6-29 09:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
抱歉初次进入贵坛,下次会注意.
2006-6-29 11:41
0
游客
登录 | 注册 方可回帖
返回
//