程序员的自我修养
枯萎的海风
向来缘浅, 奈何情深, 彼此豆蔻,谁许谁地老天荒, 敌不过似水流年, 逃不过此间少年
展开
-
程序员的自我修养 读书笔记 chp5,chp6
5.1 windows的二进制文件格式PE/COFFwindows 平台, 引入一种称为PE的可执行格式,他有着跟ELF一样良好的平台扩展性,和ELF一样都是从COFF发展而来的6.1 进程虚拟地址空间进程: 是一个动态概念, 程序是一个静态概念linux 中原则上 进程可以有 3GB的进程空间(剩下 1GB 给操作系统), windows 中原则上只有2G(2G给操作系统)PAE: 32原创 2016-11-04 22:53:27 · 537 阅读 · 0 评论 -
[读书笔记]程序员的自我修养 chp13 一个简单的CRT 运行库实现
0. 前言目标:实现一个小型的 CRT 运行库本质: 利用系统提供的api接口, 实现一个通用的 CRT 函数接口, 使得 C 语言程序可以自由的运行在各个不同的系统上项目工程地址: https://github.com/zhyh2010/miniCRT1. 遇到的一些问题windows.h 不包含路径集 解决方法: http://www.unjeep.com/q/86995415原创 2016-12-22 22:03:47 · 1007 阅读 · 1 评论 -
[读书笔记]程序员的自我修养 chp12
12.1 系统调用介绍12.1.1 什么是系统调用现代操作系统都将可能会发生冲突的系统资源(文件, 网络, IO, 设备)保护起来, 阻止应用程序直接访问系统调用通过中断实现, linux 使用 0x80 中断, 而 windows 使用 0x2e 中断 作为系统调用的入口12.1.2 Linux 系统调用使用 0x80 中断, eax 存放系统调用的接口号, 同时, eax 也是调用结果的原创 2016-12-14 16:11:23 · 410 阅读 · 0 评论 -
[读书笔记]程序员的自我修养 chp8
8.1 共享库版本8.1.1 共享库兼容性共享库的更新被分为两类: 兼容更新不兼容更新这个和二进制接口有关系 ie, ABI不建议使用C++ 做共享库8.1.2 共享库版本命名形如: libname.so.x.y.zx 为主版本号, 表示重大升级y 表示此版本号, 表示增量升级z 表示发布版本号, 不添加任何新接口, 也不对接口进行更改有些库, 如 Glibc 不遵从这个命名规原创 2016-11-25 12:08:07 · 392 阅读 · 0 评论 -
[读书笔记]程序员的自我修养 chp10
10.1 程序的内存布局一个32bit 指针的寻址空间是 4GB, 其中一部分空间会被分配给内核空间, 剩余部分给用户 可以很容易看到栈是向低地址增长, 堆是向高地址增长10.2 栈和调用惯例10.2.1 什么是栈经典的 i386 系统中, 栈总是向下增长的, 栈顶通过 esp 寄存器定位, 压栈操作使得栈顶的地址减少, 弹出操作使得栈顶地址增大 栈通常用来维护 一个函数调用所需要的信息原创 2016-12-04 21:07:52 · 382 阅读 · 0 评论 -
[读书笔记]程序员的自我修养 chp9
9.1 DLL 简介dll 文件的扩展名不一定是 dll, 也可以是 ocxdll 文件相比于linux 的共享对象, 更加强调模块化9.1.1 进程地址空间和内存管理一个dll 在不同的进程中拥有不同的私有数据的副本, 这个类似 ELF 共享对象, 不过由于ELF 中代码段是地址无关的, 可以实现多个进程共享一份代码, 但是dll 代码却并不是地址无关的, 因而只能在某些情况下被多个进程间原创 2016-12-04 11:41:43 · 411 阅读 · 0 评论 -
[读书笔记]程序员的自我修养 chp11
11.1 入口函数和程序初始化11.1.1 程序从main 开始吗程序有一个入口函数 entry point, 实际上是 程序的初始化和结束部分, 他往往是运行库的一个部分一个典型的程序运行步骤: 操作系统创建进程, 把控制权交给程序的入口,这个入口, 往往是运行库中的某个入口函数入口函数对运行库和程序运行环境进行初始化, 包括堆, IO, 线程, 全局变量构造 etc入口函数在完成初始化原创 2016-12-11 21:43:39 · 406 阅读 · 0 评论 -
程序员的自我修养 读书笔记 chp 7
7.1 为什么要动态链接静态链接浪费内存和磁盘空间, 模块更新也比较困难而解决空间浪费和更新困难这两个问题最简单的方法就是将程序模块相互分割开来, 形成独立的文件。也就是说, 把链接这个过程推迟到了运行时候再进行, 这就是动态链接的基本思想通过动态链接不仅可以节省内存, 也可以减少物理页面的换入和换出, 还可以增加CPU缓存的命中率。动态链接还可以增强程序的兼容性动态链接的基本思想是把程序原创 2016-11-13 22:39:10 · 556 阅读 · 0 评论 -
程序员的自我修养 读书笔记 chp4
4.1 空间与地址分配链接: 将几个输入目标文件加工后合并成一个输出文件的过程链接方式: 按序叠加 在有很多输入文件的情况下, 输出文件将会有很多零散的段相似段合并 两步链接: 空间与地址分配符号解析和重定位4.2 符号解析和重定位重定位重定位表绝对寻址修正和相对寻址修正的区别在于绝对寻址修正后的地址为该符号的实际地址, 而相对寻址修正后的地址为符号距离被修正位置的地址差4原创 2016-10-29 22:52:04 · 653 阅读 · 0 评论 -
程序员的自我修养 读书笔记 chp3
3.1 目标文件的格式PC 平台流行的可执行文件的格式主要是 windows 下面的 PE 和 Linux 下的ELF, 他们都是COFF 格式的变种3.2 目标文件是什么样的一般来说, text 段放置代码, data段放置初始化的数据(全局变量或者静态变量), bss 放置未初始化的数据(全局变量或者静态变量) bss 段只是为未初始化的全局变量和静态变量预留了位置, 并没有内容, 不会占原创 2016-10-27 14:50:18 · 516 阅读 · 0 评论 -
程序员的自我修养 读书笔记 chp2
2.1 被隐藏了的过程一般一个hello world程序主要可以分为4个步骤: 预处理,处理其中的一些宏等信息编译, 将预处理完的文件进行词法分析,语法分析,语义分析以及优化之后生成相应的汇编代码文件汇编, 将汇编代码转化为机器码链接,将程序运行所需要的各个模块整合起来2.2 编译器做了什么词法分析 lex语法分析 yacc语义分析 生成语法树中间语言生成 将语法树转化为原创 2016-10-26 11:26:40 · 504 阅读 · 0 评论 -
程序员的自我修养 读书笔记 chp1
1. 前言知乎上面好多推荐看这本书的, 今天拿起来看看, 做些笔记2. 笔记1.2 万变不离其宗计算机硬件中几个关键部件: 中央处理器cpu内存IO控制芯片硬件结构框架 北桥: 高速芯片 使用 PCI 总线 南桥: 低速芯片 使用 ISA 总线SMP 和 多核 由于CPU的频率受到制作工艺限制,无法继续提升, 就采用增加cpu 数量提升性能但是这个有点类似人月神话中的思想,原创 2016-10-26 10:48:16 · 868 阅读 · 0 评论 -
windows 查看DLL导出函数的方法
windows 查看DLL导出函数的方法点我查看原文在window下查看动态库的导出函数可以用vs自带的Dependenc工具;对于VC6.0,VC所带的Depends软件,在VC6安装目录下的tools文件夹里面,可以直接运行。 VS2010中没有了Depends工具,如何查看DLL文件的导出接口呢? VS2010的操作方法如下:1. 打开转载 2017-05-09 21:57:00 · 49858 阅读 · 0 评论