关于OD的一个问题

[复制链接]
查看11 | 回复4 | 2021-1-27 05:39:39 | 显示全部楼层 |阅读模式
多次运行一个进程时,照理说每次所处的内存位置都是不一样的啊
但是我用OD加载同一个程序多次,起始位置总是00401000,这是为什么
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:39:39 | 显示全部楼层
进程,都是自己独立的逻辑地址空间吧,如果不是地址已经被占用,总是会加载到模块文件里指定的默认位置的,一般的程序载入地址不会变的,因为它是首先被加载的,地址区间一般又是设置在低端,也不会和高端的共享区间重叠。
回复

使用道具 举报

千问 | 2021-1-27 05:39:39 | 显示全部楼层
引用楼主u013763958的回复:多次运行一个进程时,照理说每次所处的内存位置都是不一样的啊
但是我用OD加载同一个程序多次,起始位置总是00401000,这是为什么
你看到的这个地址是逻辑地址,不同32位进程的逻辑地址都是0x00000000~0xffffffff,当然这有一部分地址空间被操作系统内核占用了。程序运行的时候逻辑地址会映射到物理空间中,也就是你内存空间上。至于程序入口地址为什么是0x00401000,这个是可以在编译的时候设置的。尽管逻辑地址总是固定的,但是物理地址却不是一致的,所以你理解错误了
回复

使用道具 举报

千问 | 2021-1-27 05:39:39 | 显示全部楼层
内存不是分页吗,一个进程被划分成若干页,需要哪个也就映射到物理内存,但是上次映射的物理内存位置如果被占用了,那就在找个其他空白位置映射
回复

使用道具 举报

千问 | 2021-1-27 05:39:39 | 显示全部楼层
cpu给每个程序运行都是独立运行的,其实不是,只是程序自己以为是。0040000是程序的基地址。1000是它的入口偏移,为什么不是0040000为入口呢?cpu是以1000为一页分配内存地址,而0-1000是存放了dos头和pe格式信息。这个是最完美的回答了楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行