3585|5

6366

帖子

4917

TA的资源

版主

楼主
 

程序员应该有哪些良好习惯呢?请看《程序员的自我修养》 [复制链接]

 
程序员的自我修养

        念书的时候,作为标准的爱好技术的宅男,每天扫一遍各大高校BBS的技术版面,基本好比一日三餐一样平常。我对计算机技术方面的口味很杂,从汇编版到C++到Linux内核开发、Linux应用开发、游戏开发、网络、编程语言、体系结构、移动开发、开源闭源我都会参上一脚。
  我始终认为技术优劣取决于需求,与很多持有“编程语言血统论”的程序开发者不同,我不认为C++或Java本身有什么直接可比性,或者OOP与函数式编程谁优谁劣,我始终坚持认为作为开发者,MOP(Market/Money Oriented Programming)才是唯一不变的编程范式。于是我往往不参与那些技术、平台、语言教派之间的宗教战争,这种论战基本上每周都会有,我很佩服论战各方见多识广、旁征博引、高屋建瓴的论断,但我往往只是灌灌水调节一下思绪。相反,我很关注一些与语言、平台等相对独立的基本的系统概念方面的问题,这些问题比较具体,也比较实用,比如:
  为什么程序是从main开始执行?
  “malloc分配的空间是连续的吗?”
  “PE/ELF文件里面存的是什么?”
  “我想写一个不需要操作系统可以直接在硬件上跑的程序该怎么做?”
  “目标文件是什么?链接又是什么?”
  “为什么这段程序链接时报错?”
  “句柄到底是什么东西?”
  这些问题看似很简单但实际上有很多值得深入挖掘的地方,比如第一个问题围绕着main函数执行前后可以延伸出一大堆问题:程序入口、运行库初始化、全局/静态对象构造析构、静态和动态链接时程序的初始化和装载等。我们把这些问题归结起来,发现主要是三个很大的而且连贯的主题,那就是“链接、装载和库”。




最新回复

这个可以有  详情 回复 发表于 2014-8-17 22:12
点赞 关注
 
 

回复
举报

9

帖子

0

TA的资源

一粒金砂(中级)

推荐
 
hbwangliang 发表于 2014-8-8 08:50
我想写一个不需要操作系统可以直接在硬件上跑的程序该怎么做?

明摆的事情,用单片机做不就得了
 
 
 

回复

260

帖子

0

TA的资源

一粒金砂(高级)

推荐
 
我想写一个不需要操作系统可以直接在硬件上跑的程序该怎么做?

点评

明摆的事情,用单片机做不就得了  详情 回复 发表于 2014-8-9 09:38
个人签名中空板|防静电中空板www.cheng-sen.com
 
 
 

回复

6366

帖子

4917

TA的资源

版主

4
 
《程序员的自我修养:链接、装载与库》主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图、表和代码实例,力求将复杂的机制以简洁的形式表达出来。本书最后还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术。
  《程序员的自我修养:链接、装载与库》对装载、链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系统软件的参考书。同时,还可作为各行业从事软件开发的工程师、研究人员以及其他对系统软件实现机制和技术感兴趣者的自学教材。


这是一本深人阐述链接、装载和库等问题的优秀图书,读来让人愉悦,你从巾可以清晰地了解程序的前世今生,彻底理解敲人的代码如何变成程序任系统中运行。通读本书不管对于开发还是trouble shootin9都会很有帮助。建议每一位希望从事系统开发、或希望更实务地理解操作系统和编译器、或不满足于只写代码的优秀程序员都拥有这样一本书。
  ——邹飞,趋势科技(中国)研发中心资深软件要程师  
  本书从大处着眼,小处着手,以通俗易懂的语言,深入浅出地对系统软件的底层形成机制进行条分缕析,正合药山禅师所谓“高高山顶立,深深海底行”。循着作者的思绪一路走来,有如醍醐灌顶。畅快淋漓。非常高兴有预览此书初稿的宝贵机会,我在浏览书稿和查核相关资料的过程中,学到了很多以前未知或知之不深的内容。
  ——冯亮,阿里巴巴(中国)网络技术有限公司运维部系统架构师
 
 
 

回复

6366

帖子

4917

TA的资源

版主

5
 
第1部分 简介
第1章 温故而知新
1.1 从HELLO WORLD 说起
1.2 万变不离其宗
1.3 站得高,望得远
1.4 操作系统做什么
1.5 内存不够怎么办
1.6 众人拾柴火焰高
1.7 本章小结
第2部分 静态链接
第2章 编译和链接
2.1 被隐藏了的过程
2.2 编译器做了什么
2.3 链接器年龄比编译器长
2.4 模块拼装——静态链接
2.5 本章小结
第3章 目标文件里有什么
3.1 目标文件的格式
3.2 目标文件是什么样的
3.3 挖掘SIMPLESECTION.O
3.4 ELF 文件结构描述
3.5 链接的接口——符号
3.6 调试信息
3.7 本章小结
第4章 静态链接
4.1 空间与地址分配
4.2 符号解析与重定位
4.3 COMMON 块
4.4 C++相关问题
4.5 静态库链接
4.6 链接过程控制
4.7 BFD 库
4.8 本章小结
第5章 WINDOWS PE/COFF
5.1 WINDOWS 的二进制文件格式PE/COFF 134
5.2 PE 的前身——COFF
5.3 链接指示信息
5.4 调试信息
5.5 大家都有符号表
5.6 WINDOWS 下的ELF——PE
5.7 本章小结
第3部分 装载与动态链接
第6章 可执行文件的装载与进程
6.1 进程虚拟地址空间
6.2 装载的方式
6.3 从操作系统角度看可执行文件的装载
6.4 进程虚存空间分布
6.5 LINUX 内核装载ELF 过程简介
6.6 WINDOWS PE 的装载
6.7 本章小结
第7章 动态链接
7.1 为什么要动态链接
7.2 简单的动态链接例子
7.3 地址无关代码
7.4 延迟绑定(PLT)
7.5 动态链接相关结构
7.6 动态链接的步骤和实现
7.7 显式运行时链接
7.8 本章小结
第8章 LINUX 共享库的组织
8.1 共享库版本
8.2 符号版本
8.3 共享库系统路径
8.4 共享库查找过程
8.5 环境变量
8.6 共享库的创建和安装
8.7 本章小结
第9章 WINDOWS 下的动态链接
9.1 DLL 简介
9.2 符号导出导入表
9.3 DLL 优化
9.4 C++与动态链接
9.5 DLL HELL
9.6 本章小结
第4部分 库与运行库
第10章 内存
10.1 程序的内存布局
10.2 栈与调用惯例
10.3 堆与内存管理
10.4 本章小结
第11章 运行库
11.1 入口函数和程序初始化
11.2 C/C++运行库
11.3 运行库与多线程
11.4 C++全局构造与析构
11.5 FREAD 实现
11.6 本章小结
第12章 系统调用与API
12.1 系统调用介绍
12.2 系统调用原理
12.3 WINDOWS API
12.4 本章小结
第13章 运行库实现
13.1 C 语言运行库
13.2 如何使用MINI CRT
13.3 C++运行库实现
13.4 如何使用MINI CRT++
13.5 本章小结
附录A
A.1 字节序(BYTE ORDER)
A.2 ELF 常见段
A.3 常用开发工具命令行参考
索引
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

6
 
这个可以有
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表