上面我们使用了uClibc库以减小整个程序的大小,其实在可执行二进制 文件中,有很多不必要的信息,我们可以使用objcopy把它们抽取掉, 程序仍然可以正常运行。
(1)检验抽取之前的大小: #ls -l halo -rwxr-xr-x 1 root root 2222 8 4 14:29 halo
(2)使用objdump进行进行信息检验
[root@localhost c]# objdump -h halo
halo: file format elf32-i386
Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000198 08048074 08048074 00000074 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .rodata 00000007 0804820c 0804820c 0000020c 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 2 .data 00000010 08049214 08049214 00000214 2**2 CONTENTS, ALLOC, LOAD, DATA 3 .got 00000034 08049224 08049224 00000224 2**2 CONTENTS, ALLOC, LOAD, DATA 4 .bss 00000000 08049258 08049258 00000258 2**2 ALLOC 5 .comment 00000037 00000000 00000000 00000258 2**0 CONTENTS, READONLY 6 .note 00000014 00000000 00000000 0000028f 2**0 CONTENTS, READONLY [root@localhost c]#
(3)使用objcopy把不用的信息去掉:
[root@localhost c]# objcopy -R .comment -R .note halo halo.min
(4)再看一看程序的大小吧:
[root@localhost c]# ll total 24 -rwxr-xr-x 1 root root 2222 8 4 14:29 halo [root@localhost c]# -rw-r--r-- 1 root root 54 8 4 14:23 halo.c -rwxr-xr-x 1 root root 2022 8 4 14:35 halo.min -rw-r--r-- 1 root root 912 8 4 14:28 halo.o -rw-r--r-- 1 root root 393 8 4 14:28 halo.s -rw-r--r-- 1 root root 1431 8 4 14:34 readme
可见,我们生成的halo.min比以前的halo小了一些。 检验一下: [root@localhost c]# ./halo.min hello
|