[100分]有没有关于binutils的深入的资料?或者深入底层的资料?

李迟
博客专家认证
2010-12-28 11:19:13
最近打了一段时间的酱油,东搞搞西搞搞,但始终离不一基本目标:深入底层。
这个底层并非指与硬件、芯片打交道,并非涉及时序、操作。
这个“底层”以我现在的水平不好定义,这里只能给出一些关键字:静态库、动态库、程序如何加载、ld-linux-so.x、程序地址空间分布、堆、栈、linux平台入口函数和初始化函数……

binutils很久就遇到过了,最开始有印象应该是做LFS时候吧。最近研究了一下linux下的动态库,用过其中的一些工具,如ojbdump、nm、strip、readelf,等等。网上有很多资料,可惜,这些资料大部分都是讲如何使用这些工具、这些工具如何重要,再深入一些的话,就没有了。到官方网站上,也找到一些manual而已,想多点了解readelf输出结果,也没有什么资料介绍,只能靠平时专业英语的感觉理解,比如OJBECT、FUNC、GLOBAL、DEFAULT等等。——谁都知道程序中了很多符号表,但里面的含义、字段似乎就不知道了。

有几本书还是讲得比较好的,比如《Linux性能详解》、《程序员的自我修养》等等。

并非在下钻牛角尖,我只是觉得,作为一个刚出来混的程序员,有必要去了解这些东西——更何况,目前还处于打酱油阶段,何不趁有时间再研究研究?天知道以后还会不会有现今这心情、这时间!

在IBM的devoloperworks看到一句话:
“其实有很多东西只要勤于思考,还是能够自己悟出一些道理的。国外有一些高手就是通过能够大家都能见到的的一点点资料,自己摸索出来很多不为人知的秘密。”
“学习计算机很关键的一点在于一定要富于探索精神,要让自己做到知其然并知其所以然。”

辛苦不怕,动手不怕,师父领进门,修行靠各人,奈何无半点指导,凭自己摸索,漫漫长路,走得坎坷,亦无人知。而且,这么久,还不一样走过来。不过,现在工作了就要注意效率与时间了。

主要是想了解一下进程在main执行之前做了什么、之后又做了什么,谁在做等等问题,但比较少资料情况下感慨一下,大家有什么好的资料不妨介绍一下,100分,不多。
...全文
134 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
李迟 2010-12-29
回3楼:
那本书还差100来页就看完,打算继续看第二遍。
那个图也很了解,也写过程序测试过,当然,也研究过进程的maps文件。

回4楼:
现在我还没有到达那么高的程度,毕竟,我只是一个刚出来工作的人。大师级别的看到的OS基本都是一样的,看许多计算机领域内的东西本质是一样的,不过我还不行,所以需要一定感性的认识(最具体的,就是通过操作linux来了解*nix,慢慢再深入)。
前不久,看到一帖子,大意是讲很懂算法、很懂架构,但没有具体实现出来,很多人都发表了意见。我想他们适合搞研究。可惜我不是。

你说的我非常赞同,也深有感触。那本linker and loader的电子书我有,也开始看了。但又怕深入这个层次中对工作无太多帮助(是对工作,对自身功力绝对有用),以前大学时,许多东西不用了解细节,照样风光。我大三下学期就决心放弃比赛,退出江湖,潜心研究那些东西,因此书看了不少,但外人看不到啊!也没什么地方体现啊!因此,现在我对我自己所谓的“底层研究”只是在业余之时学习,仅当自己的兴趣。

我真正开始看开源项目代码,应该是在毕业设计中,那个是luvcview项目,我去研究了,所以至今我仍然有印象。是的,开源代码有很多很妙的技巧、方法,这是要自己实践才能感悟出来的。

我学习有两种方法,它们是矛盾的,自上而下以及自下而上。但我也坚信学习是漫长的过程,需要不断地学习。所以我以前不规定我用多少个月入门linux,多少个月入门单片机,多少个月学完MFC。

不知我对开源这份热情能保持多久,我怕以后的生活压力改变了自己。

说了很多,又怕别人说发牢骚了。
  • 打赏
  • 举报
回复
chenee543216 2010-12-29
呵呵,很久没有看到这么爱学习的同鞋了,鼓励一下~

1 从你的文章来看,我认为你已经熟悉linux的基本操作,(shell,代码的编辑,编译,运行等基础)

2 然后你开始思考了:
但是你提到的这些所谓底层的东西实际上只是表面,这些东西(binutils,objdump,strings...)都只是对OS,编译器,加载器的一个具体实现而已(linux下)。

可能你真正需要的是去__潜心__看__一本__描述如何实现那些经典的计算机理论的书(比如linker&loader,computer system:a programmer‘s perspective;UEAP),这些书描述了如何在linux环境实现代码/进程的加载运行,运行状态变化,相互之间的通信。。。。

但是,本质上,这些都只是具体环境实现,进程完全可以不用这样编译,不用这样加载,就像windows下的编译后binary和linux下的完全不一样,加载实现也不一样。但是他们的本质是一样的。

其实我还有很多话想说,但是我真的太懒了,而且这些东西最终还是要靠自己“悟”

PS
你的学习方法不对,linux的美在于OpenSource,去看别人的代码,看bintuils的代码。
Linus Torvalds这个鸟人曾经很niubility的说过:
Read The Fu*king Source Code!!
我曾经说过:
Code tell the turth!
  • 打赏
  • 举报
回复
phpjspasp 2010-12-29
[Quote=引用 1 楼 suyangwei 的回复:]

静态库、动态库、程序如何加载,这些很少有书讲吧,难以成书,研究下加载函数吧。
程序地址空间分布、堆、栈,这是编译原理,
linux平台入口函数和初始化函数,什么初始化函数?
ld-linux-so.x是我想了解的,待研究中。
感觉还是要有项目来驱动你,不然你确实无从下手。
[/Quote]
第一点,《程序员的自我修养》这本书讲了不少,它的副标题就是链接加载与库。
第二点, 一个图就说明了http://liar.pangwa.com/wp-content/uploads/2008/04/mem.bmp
第三点,《程序员的自我修养》也讲了。
有东西来驱动很重要,呵呵,有动力学东西快。
  • 打赏
  • 举报
回复
李迟 2010-12-29
[Quote=引用 9 楼 chenee543216 的回复:]
lz,你说了那么多我又搞不清你到底想要什么,想表达什么了!

就事论事,如果想了解binutils,看binutils的代码实现。
如果想了解进程行为,看加载器和内核相关代码。
[/Quote]
能熟练使用binutils提供的工具以及输出结果,只作工具来使用。
加载器和内核是关键,需要深入。
  • 打赏
  • 举报
回复
chenee543216 2010-12-29
lz,你说了那么多我又搞不清你到底想要什么,想表达什么了!

就事论事,如果想了解binutils,看binutils的代码实现。
如果想了解进程行为,看加载器和内核相关代码。
  • 打赏
  • 举报
回复
李迟 2010-12-29
[Quote=引用 7 楼 suyangwei 的回复:]

我刚搞了个内核移植。花了2个月,太痛苦了。
uboot要简小些。如果自己研究,还是要抓住重点,不然也会疲劳。
我工作好多年了,下半年才搞linux,蛮有兴趣的。uboot我还没来的及整它。
[/Quote]
我第1次搞内核时,似乎是大三时候,自学很痛苦,过了这个阶段就觉得那些辛苦没白费。
u-boot的话,对整体流程有了认识了,研究的话,就挑自己感兴趣的来做,比如命令行的自动补齐、历史命令保存,另外,看看一些常用函数的写法也很有帮助(strcmp、memcpy这些经典的函数)。
或者是我刚开始工作吧,任务不重,有时间搞自己想搞的东西。
  • 打赏
  • 举报
回复
suyangwei 2010-12-29
[Quote=引用 2 楼 subfate 的回复:]

引用 1 楼 suyangwei 的回复:

谢谢回复!
你说的第1、2点,我是在网上的零散资料中积累的。
……
[/Quote]
我刚搞了个内核移植。花了2个月,太痛苦了。
uboot要简小些。如果自己研究,还是要抓住重点,不然也会疲劳。
我工作好多年了,下半年才搞linux,蛮有兴趣的。uboot我还没来的及整它。
  • 打赏
  • 举报
回复
李迟 2010-12-28
[Quote=引用 1 楼 suyangwei 的回复:]
静态库、动态库、程序如何加载,这些很少有书讲吧,难以成书,研究下加载函数吧。
程序地址空间分布、堆、栈,这是编译原理,
linux平台入口函数和初始化函数,什么初始化函数?
ld-linux-so.x是我想了解的,待研究中。
感觉还是要有项目来驱动你,不然你确实无从下手。
[/Quote]
谢谢回复!
你说的第1、2点,我是在网上的零散资料中积累的。
第3点正在研究。
最后一句:前不久搞了下u-boot,也研究它的代码了,过一两个月,激情也淡了。
我就怕这样下去就没激情了。但我说多了,又怕人家说不淡定、发牢骚。
  • 打赏
  • 举报
回复
suyangwei 2010-12-28
静态库、动态库、程序如何加载,这些很少有书讲吧,难以成书,研究下加载函数吧。
程序地址空间分布、堆、栈,这是编译原理,
linux平台入口函数和初始化函数,什么初始化函数?
ld-linux-so.x是我想了解的,待研究中。
感觉还是要有项目来驱动你,不然你确实无从下手。
  • 打赏
  • 举报
回复
发帖
Linux/Unix社区

2.2w+

社区成员

Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
帖子事件
创建了帖子
2010-12-28 11:19
社区公告
暂无公告