2012年(19)
分类: LINUX
2012-01-05 18:29:45
a、Q&A
Q:为什么编出来的应用肯定是在用户地址空间运行,而内核编出来的代码却一定是运行在内核空间?
A:链接器(Linker):目的是描述输入文件的sections是如何映射到输出文件中,并控制输出文件的内存排列。而且ld就是使用这个缺省的script内置在链接器中。正是这些再起着作用.
b、链接脚本具体实践
链接脚本中无论是输出文件还是输入文件,主要数据是文件中的各种段,把输入文件中的段称为输入段(Input Sections),输出文件中的段称为
输出段(Output Sections)。
一般链接脚本名都以lds作为扩展名,ld script
ld script语法:
1.语句之间使用分号";"作为分隔符,但是对于命令语句来说也可以使用换行来结束该语句。
2.脚本文件中使用到的文件名、格式名或段名等凡包含";"或其他的分隔符的,都要使用双引号将该名字全称引用起来。
实践:hello.c
预处理:gcc -E hello.c -o hello.i
编译:gcc -S hello.i -o hello.s
汇编:as hello.s -o hello.o
链接:ld -static -verbose /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbeginT.o -
L/usr/lib/gcc/i386-redhat-linux/4.1.2 -L/usr/lib -L/lib hello.o -start-group -lgcc -lgcc_eh -lc -end-group
/usr/lib/gcc/i386-redhat-linux/4.1.2/crtend.o /usr/lib/crtn.o > 1.txt
1.txt
c、参考链接:
http://blog.chinaunix.net/space.php?uid=20433875&do=blog&id=1680446
http://blog.chinaunix.net/space.php?uid=10678279&do=blog&id=2936584
http://hi.baidu.com/dljaye/blog/item/7b56fb9be84909b9c9eaf486.html
<<程序员自我修养>>:ld链接脚本