Chinaunix

标题: ELF中去除某段减小文件体积 [打印本页]

作者: 代小花    时间: 2014-06-06 13:16
标题: ELF中去除某段减小文件体积
本帖最后由 代小花 于 2014-06-06 13:46 编辑

学习MIT的JOS,gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 编译的时候,报错
+ as boot/boot.S
+ cc -Os boot/main.c
+ ld boot/boot
boot block too large: 600 bytes (max 510)
make: *** [obj/boot/boot] 错误 1
make: *** 正在删除文件“obj/boot/boot”
文件太大,超过510byte 没法写入MBR
网上有2个解决方法:
1.使用Ubuntu10.10 wiht gcc-4.4.5
2.修改make文件
#$(OBJDIR)/boot/boot: $(BOOT_OBJS)
#        @echo + ld boot/boot
#        $(V)$(LD) $(LDFLAGS) -N -e start -Ttext 0x7C00 -o $@.out $^
#        $(V)$(OBJDUMP) -S $@.out >$@.asm
#        $(V)$(OBJCOPY) -S -O binary $@.out $@
#        $(V)perl boot/sign.pl $(OBJDIR)/boot/boot

$(OBJDIR)/boot/boot: $(BOOT_OBJS)
        @echo + ld boot/boot
        $(V)$(LD) $(LDFLAGS) -N -e start -Ttext 0x7C00 -o $@.out $^
        $(V)$(OBJDUMP) -S $@.out >$@.asm
        $(V)$(OBJCOPY) -S -R ".eh_frame" -O binary $@.out $@
        $(V)perl boot/sign.pl $(OBJDIR)/boot/boot
新的与旧的不同之处在于倒数第二个语句:
$(V)$(OBJCOPY) -S -R ".eh_frame" -O binary $@.out $@
去除了.eh_frame段,虽然这样成功减小了文件体积,编译、运行起来也无错。
但是这样没法进行栈回溯,函数栈不用ebp了。课程里有个实验是要利用ebp进行栈回溯的
我对elf文件不熟悉,所以问下各位大大,有没有可能去除别的段减小文件体积的?


作者: qxhgd    时间: 2014-06-06 16:58
strip试试呢?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2