自定义ELF文件中的section

| 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,这个就是我在程序中自己定义的
看完本文有收获?请分享给更多人

关注「黑光技术」,关注大数据+微服务