| 2009年4月30日
在看内核代码的时候发现,原来ELF文件的section是完全可以自己定义的。当然这只是作新的增加。 今天请教了王老师,并做了一个简单的测试。但是具体的用意还有点不是很清楚,还有待继续分析ELF文件。
测试程序
#include <stdio.h>
//以下是定义section
#define __section(S) __attribute__ ((__section__(#S)))
#define __xux __section(.xux)
int __xux helloworld(){
printf("hello world\n");
return 0;
}
int main()
{
helloworld();
return 0;
}
运行
helight@Zhwen:test$ gcc section.c -o section
helight@Zhwen:test$ ./section
hello world
helight@Zhwen:test$
查看自定义的section
helight@Zhwen:test$ objdump -h section
section: file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 00000013 08048114 08048114 00000114 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020 08048128 08048128 00000128 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .hash 00000028 08048148 08048148 00000148 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .gnu.hash 00000020 08048170 08048170 00000170 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynsym 00000050 08048190 08048190 00000190 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .dynstr 0000004a 080481e0 080481e0 000001e0 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version 0000000a 0804822a 0804822a 0000022a 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .gnu.version_r 00000020 08048234 08048234 00000234 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .rel.dyn 00000008 08048254 08048254 00000254 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .rel.plt 00000018 0804825c 0804825c 0000025c 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
10 .init 00000030 08048274 08048274 00000274 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .plt 00000040 080482a4 080482a4 000002a4 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .text 0000017c 080482f0 080482f0 000002f0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .xux 00000019 0804846c 0804846c 0000046c 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .fini 0000001c 08048488 08048488 00000488 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
。。。。//注意上面的.xux这个section,这个就是我在程序中自己定义的
关注「黑光技术」,关注大数据+微服务