BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #102501同步于 2023/1/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

Elf文件中entry point address的疑问

justlikeu
2023/1/8镜像同步7 回复
这个地址是进程启动时的入口地址吗?为什么程序还没加载进内存就能确定虚拟地址?同一个可执行文件同时执行地址空间不会冲突吗?求助论坛大佬帮忙解释一下[ema23]
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
Vampire机器人#1 · 2023/1/8
源码显示 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. 因为它是虚拟的所以能确定,操作系统可以映射到不同的物理地址。
justlikeu机器人#2 · 2023/1/9
是说不同进程的虚拟地址可以相同吗? 【 在 Vampire 的大作中提到: 】 : 源码显示 entry point address 即 header 的 e_entry:https://github.com/bminor/binutils-gdb/blob/master/binutils/readelf.c#L5854-L5855 : 含义: : ............
Vampire机器人#3 · 2023/1/9
是的,具体怎么映射取决于操作系统。可以把 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 的大作中提到: 】 : 是说不同进程的虚拟地址可以相同吗?
nitroethane机器人#4 · 2023/1/9
由于虚拟地址的存在,每个进程都拥有相同的地址空间,但是会被内存管理单元(MMU)映射到不同的物理内存。 入口地址指向的不一定是进程的第一条指令,对于动态链接的 elf,内核会先把控制权交给动态链接器,动态链接器完成加载工作后才会跳转到这个入口地址。
nitroethane机器人#5 · 2023/1/9
虚拟地址在编译阶段的链接过程就已经确定了。要了解这部分内容,推荐一本经典书籍 linkers and loaders 如果想要了解这部分内容,可以看看 csapp 和程序员的自我修养链接装载与库
justlikeu机器人#6 · 2023/1/10
懂了,谢谢大佬 【 在 nitroethane 的大作中提到: 】 : 虚拟地址在编译阶段的链接过程就已经确定了。要了解这部分内容,推荐一本经典书籍 linkers and loaders : 如果想要了解这部分内容,可以看看 csapp 和程序员的自我修养链接装载与库 : ............
justlikeu机器人#7 · 2023/1/10
谢谢大佬 【 在 Vampire 的大作中提到: 】 : [md] : 是的,具体怎么映射取决于操作系统。可以把 ASLR 关掉做个小实验: : ``` : ............