sud*_*03r 1 c c++ linux memory-management elf
根据我的理解,C/C++程序在内存中看起来像这样:

我想知道以下内容:
谢谢,
它是特定于操作系统的; 我只回答Linux.
首先,你的数字在实践中非常不正确,因为大多数程序都动态链接到几个共享对象库(包括libc6.so......).另见ld.so(8),elf(5),execve(2).没有单个 text部分(但很多"文本"像段).阅读有关pmap和objdump命令的信息.
然后,您可以了解pid 1234进程的地址空间cat /proc/1234/maps; 阅读更多关于proc(5) ...从程序内部,阅读/proc/self/maps; 例如,尝试cat /proc/$$/maps在shell中显示shell进程cat /proc/self/maps的地址空间,以及运行该cat命令的进程的地址空间.另请参见mmap(2).
你不能真正"重新定位"(你实际上是指"移动")文本部分.一些地址构建在代码中.然而,阅读有关-fPIE选项中gcc(用于位置独立可执行 ....).
当然,如果你用-rdynamic标志链接它,你可以访问程序的符号(从里面),如果你使用dlopen(3)(dlsym甚至可能dladdr......)和NULL第一个filename参数.
另请参阅有关地址空间,虚拟内存,ASLR,位置无关代码,重定位,ABI,JIT编译,名称修改和x86-64 ABI规范以及高级Linux编程手册的wikipages.