免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1750 | 回复: 1
打印 上一主题 下一主题

[内核入门] ELF中去除某段减小文件体积 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-06 13:16 |只看该作者 |倒序浏览
本帖最后由 代小花 于 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文件不熟悉,所以问下各位大大,有没有可能去除别的段减小文件体积的?

求职 : 系统工程师等
论坛徽章:
5
技术图书徽章
日期:2014-04-19 22:01:05天蝎座
日期:2014-05-09 13:49:28双子座
日期:2014-06-16 15:08:042015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:28
2 [报告]
发表于 2014-06-06 16:58 |只看该作者
strip试试呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP