Chinaunix首页 | 论坛 | 博客
  • 博客访问: 779251
  • 博文数量: 155
  • 博客积分: 4056
  • 博客等级: 上校
  • 技术积分: 1531
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-04 14:46
文章分类

全部博文(155)

文章存档

2011年(4)

2010年(4)

2009年(44)

2008年(36)

2007年(34)

2006年(28)

2005年(5)

我的朋友

分类:

2006-09-06 18:26:28

项目组借用了一台小机, 比较老, 跑的还是HP-UX 11.00, yaw中看到配置是
2*750Mhz cpus, 1.5G mem, 先凑合着用了.
 
装好了 aCC 和 gcc 后, 照惯例先编译自己常用的一些工具, 在编译 lsof 时发现了一个以前没注意的问题, 这促使我编写了这个我称之为 elfs (ELF64 Stripper) 的工具.
 
问题是这样的:
1) HP-UX 11.00下 lsof 是 kmem-based 的, 故必须编译成64位;
2) HP-UX 下64位执行文件不再是 SOM 结构, 而是 ELF64 结构;
3) ELF64 结构里包含了一些对程序执行无用, 仅仅是注释用的section, 比如说有一个 .note 的section;
4) 我是用 aCC 来编译 lsof 的, 结果发现在产生的目标文件中就包含有这个叫 .note 的section;
5) 讨厌的事情是: aCC 在这个叫 .note 的section里放的居然是用来产生目标文件的全部源文件信息, 如修改时间/编译时间/最后连接时间, 最可恨的是, 还有全路径名! 也许 aCC 的设计者认为这样对日后程序出问题时定位错误有帮助(强烈怀疑中...), 但显然这暴露了编译者的目录结构和相应的使用习惯(隐私泄漏?), 而且无端地增大了执行文件的尺寸(不幸的是有一定偏执倾向的我很在意这个);
6) 在 man aCC 和 man ld 没有找到"合法"的剔除这些信息的途径后(在此恳请达人不吝赐教), 我决定自己写一个小工具来做掉它:)
 
于是 elfs 就这样出现了, 经过它处理后我用 aCC 编译的 lsof 从 198536 减小到了 176856, 更重要的是我的个人信息最大可能(?)地从中剔除了:)
 
在编程中发现存在更"过份"的方式来进一步减小尺寸, 但将破坏 ELF 文件的完备性和一致性, 尽管不影响程序的运行, 但会导致某些依赖其的工具不能正常工作, 如 bintuils 中的 readelf/elfdump/strip 等, 而这显然也是不能被我接受的.
 
没什么大用, 也或者早有了类似甚至更强的工具可以达到相同的目的, 如果这样(几乎可以肯定是这样^_^), 就当是一次小小的练习:)
 
OK, 介绍完毕, 有兴趣的朋友这里下载:
 
文件: elfs.tar.bz2
大小: 10KB
下载: 下载
阅读(3441) | 评论(2) | 转发(0) |
0

上一篇:联想的专利

下一篇:elfs 更新了一下

给主人留下些什么吧!~~