返回信息流这个地址是进程启动时的入口地址吗?为什么程序还没加载进内存就能确定虚拟地址?同一个可执行文件同时执行地址空间不会冲突吗?求助论坛大佬帮忙解释一下[ema23]
这是一条镜像帖。来源:北邮人论坛 / cpp / #102501同步于 2023/1/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
Elf文件中entry point address的疑问
justlikeu
2023/1/8镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
源码显示 entry point address 即 header 的 e_entry:https://github.com/bminor/binutils-gdb/blob/master/binutils/readelf.c#L5854-L5855
含义:
> This member gives the virtual address to which the system first transfers control, thus starting the process.
> If the file has no associated entry point, this member holds zero.
因为它是虚拟的所以能确定,操作系统可以映射到不同的物理地址。
是说不同进程的虚拟地址可以相同吗?
【 在 Vampire 的大作中提到: 】
: 源码显示 entry point address 即 header 的 e_entry:https://github.com/bminor/binutils-gdb/blob/master/binutils/readelf.c#L5854-L5855
: 含义:
: ............
是的,具体怎么映射取决于操作系统。可以把 ASLR 关掉做个小实验:
```
$ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
0
$ cat &
[1] 7061
[1]+ Stopped cat
$ cat &
[2] 7065
[2]+ Stopped cat
$ sudo pmap -x 7061 | head
7061: cat
Address Kbytes RSS Dirty Mode Mapping
0000555555554000 8 8 0 r---- cat
0000555555556000 16 16 0 r-x-- cat
000055555555a000 8 8 0 r---- cat
000055555555c000 4 4 4 r---- cat
000055555555d000 4 4 4 rw--- cat
000055555555e000 132 8 8 rw--- [ anon ]
00007ffff7600000 6064 428 0 r---- locale-archive
00007ffff7d9d000 148 12 12 rw--- [ anon ]
$ sudo pmap -x 7065 | head
7065: cat
Address Kbytes RSS Dirty Mode Mapping
0000555555554000 8 8 0 r---- cat
0000555555556000 16 16 0 r-x-- cat
000055555555a000 8 8 0 r---- cat
000055555555c000 4 4 4 r---- cat
000055555555d000 4 4 4 rw--- cat
000055555555e000 132 8 8 rw--- [ anon ]
00007ffff7600000 6064 428 0 r---- locale-archive
00007ffff7d9d000 148 12 12 rw--- [ anon ]
```
当然也有所谓的 single address space operating system。
【 在 justlikeu 的大作中提到: 】
: 是说不同进程的虚拟地址可以相同吗?
由于虚拟地址的存在,每个进程都拥有相同的地址空间,但是会被内存管理单元(MMU)映射到不同的物理内存。
入口地址指向的不一定是进程的第一条指令,对于动态链接的 elf,内核会先把控制权交给动态链接器,动态链接器完成加载工作后才会跳转到这个入口地址。
虚拟地址在编译阶段的链接过程就已经确定了。要了解这部分内容,推荐一本经典书籍 linkers and loaders
如果想要了解这部分内容,可以看看 csapp 和程序员的自我修养链接装载与库
懂了,谢谢大佬
【 在 nitroethane 的大作中提到: 】
: 虚拟地址在编译阶段的链接过程就已经确定了。要了解这部分内容,推荐一本经典书籍 linkers and loaders
: 如果想要了解这部分内容,可以看看 csapp 和程序员的自我修养链接装载与库
: ............
谢谢大佬
【 在 Vampire 的大作中提到: 】
: [md]
: 是的,具体怎么映射取决于操作系统。可以把 ASLR 关掉做个小实验:
: ```
: ............