0x08048000是ld在linux / x86上启动第一个PT_LOAD段的默认地址.在linux / amd64上,默认值为0x400000,您可以使用自定义链接描述文件更改默认值.您还可以将.text部分以-Wl,-Ttext,0xNNNNNNNN标志开头的位置更改为gcc.要理解为什么.text没有映射到地址0,请记住,为方便起见,NulL指针通常映射到((voID *)0).因此,将零页面映射为不可访问以捕获NulL指针的使用是有用的. .text开始之前的内存实际上被很多东西使用了;以cat / proc / self / maps为例:
$cat /proc/self/maps 001c0000-00317000 r-xp 00000000 08:01 245836 /lib/libc-2.12.1.so00317000-00318000 ---p 00157000 08:01 245836 /lib/libc-2.12.1.so00318000-0031a000 r--p 00157000 08:01 245836 /lib/libc-2.12.1.so0031a000-0031b000 rw-p 00159000 08:01 245836 /lib/libc-2.12.1.so0031b000-0031e000 rw-p 00000000 00:00 0 00376000-00377000 r-xp 00000000 00:00 0 [vdso]00852000-0086e000 r-xp 00000000 08:01 245783 /lib/ld-2.12.1.so0086e000-0086f000 r--p 0001b000 08:01 245783 /lib/ld-2.12.1.so0086f000-00870000 rw-p 0001c000 08:01 245783 /lib/ld-2.12.1.so08048000-08051000 r-xp 00000000 08:01 2244617 /bin/cat08051000-08052000 r--p 00008000 08:01 2244617 /bin/cat08052000-08053000 rw-p 00009000 08:01 2244617 /bin/cat09ab5000-09ad6000 rw-p 00000000 00:00 0 [heap]b7502000-b7702000 r--p 00000000 08:01 4456455 /usr/lib/locale/locale-archiveb7702000-b7703000 rw-p 00000000 00:00 0 b771b000-b771c000 r--p 002a1000 08:01 4456455 /usr/lib/locale/locale-archiveb771c000-b771e000 rw-p 00000000 00:00 0 bfbd9000-bfbfa000 rw-p 00000000 00:00 0 [stack]
我们在这里看到的是C库,动态加载器ld.so和内核VDSO(内核映射动态代码库,它为内核提供了一些接口).请注意,堆的开始也是随机的.
总结以上是内存溢出为你收集整理的为什么Linux程序.text部分从0x0804800开始,堆栈顶部从0xbffffff开始?全部内容,希望文章能够帮你解决为什么Linux程序.text部分从0x0804800开始,堆栈顶部从0xbffffff开始?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)