- 论坛徽章:
- 0
|
原帖由 albcamus 于 2008-8-21 12:38 发表 ![]()
猜测一下:
用户程序的地址空间布局, 是不会指定一个死的高地址的(例如3G、2G这样的); 可以用ld --verbose来查看GNU ld是怎么为应用程序做布局的。
内核的布局,在arch/x86/kernel/vmlinux.lds.S ...
xuchm@xuchm:~$ strace -fe open ld --verbose >/tmp/ss
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/usr/lib/libbfd-2.18.0.20080103.so", O_RDONLY) = 3
open("/lib/libc.so.6", O_RDONLY) = 3
Process 26898 detached
这个默认脚本看来是ld编译的时候生成的,但是ld参数允许改变
ld --static test.o -o test -e main -Ttext 0x80480
xuchm@xuchm:~$ nm test
0008149b A __bss_start
0008149b A _edata
0008149c A _end
00080480 T main
xuchm@xuchm:~$ strace ./test
execve("./test", ["./test"], [/* 40 vars */]) = 0
_exit(0) = ?
Process 27046 detached
就是如果2:2的话,所有的程序都得自己编译连接了,下载的软件包都无法使用 |
|