windows PE/COFF章总结 本章学习了windows下的可执行文件和目标文件格式PE/COFF.PE/COFF文件与ELF文件非常相似,它们都是基于段的结构的二进制文件格式.Windows下最常见的目标文件格式就是COFF文件格式,微软的编译器产生的目标文件都是这种格式.COFF文件有一个很有意思的段叫".drectve段",这个段中保存的是编译器传递给链接器的命令行参数,可以通过这个段实现指定运行库等功能.Windows下的可执行文件.动态链接库等都使用PE文件格式,PE文…
Linux内核装载ELF过程 (1)bash进程调用fork()系统调用创建一个新的进程 (2)新的进程调用execve()系统调用执行指定的ELF文件,原先的bash进程继续返回等待刚才启动的新进程结束,然后继续等待用户输入命令. (3)execve()系统调用相应的入口是sys_execve(),sys_execve()进行一些参数的检查复制后,调用do_execve(). (4)do_execve()读取128个字节的文件头部,调用search_binary_handle(). (5)se…
可执行文件的装载与进程 覆盖装入和页映射是两种典型的动态装载方法 进程建立的三步 1.创建一个独立的虚拟地址空间 2.读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系. 3.将CPU的指令寄存器设置成可执行文件的入口地址,启动运行. 常见段权限组合: 以代码段为代表的权限为可读可执行段 以数据段和BSS段为代表的权限为可读可写段 以只读数据段为段表的权限为只读的段 操作系统通过给进程空间划分出一个个VMA来管理进程的虚拟空间: 基本原则就是将相同权限属性的.有相同映像文件的映射成一个VM…
相关文章:程序员的自我修养——操作系统篇 几乎所有的计算机程序,都会牵涉到网络通信.因此,了解计算机基础网络知识,对每一个程序员来说都是异常重要的. 本文在介绍一些基础网络知识的同时,给出了一些高质量的系列文章链接,以方便大家随时参考学习.相信通过本文的学习,你能对计算机网络有全面的认识! 在阅读本文之前,建议阅读以下两遍文章,以便对”计算机网络是如何工作”的有个大概的了解. 互联网协议入门(一) 互联网协议入门(二) 接下来,我们介绍一些基础网络知识. OSI参考模型 一上来就是OSI七层参考…
最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接状态是否成功的指令工具(其中又有elf格式,ld.elf相关指令).然后反汇编理解动态链接的实际执行过程,总的说来这里面的东西还真很多,主要是网上比较深入资料很少,大部分博文也是一知半解,所以后续有问题应直接阅读标准文档.<程序员的自我修养----链接.装载与库>这本书详细介绍了一个应用程序在编译…
写了这么久的读书笔记,涉及到问题大多是一些如何把软件工程做好,如何把自己的职业生涯做好.但总感觉逻辑链上缺了一环,亦即:我们为什么要把软件工程做好,我们成为一名优秀的职业生涯的意义到底在于什么?我觉得如果这个问题不去想,那么这段三段论便不是完整的,不知道为什么要做的事情而去做,未免太浑浑噩噩了,说实话,就有点行尸走肉的感觉. 本来以为程序员的自我修养这本书能够解答我心中的疑惑,然而翻开这本书,却是一些列关于系统软件如何运行和装载的问题.窃以为,如果是关于这种如何提高自身技能的书,不应该用<程序员…
<程序员思维修炼>读书笔记——week4 PB16061441 陈昶金 这周读的是Andy Hunt的著作<程序员思维修炼>,这本书对于我这种刚刚入门的新手很友好,大多是讲一些遇到问题是的解决思维与平时编程时的思路问题,对我很有帮助. 令我感触很深的是文中关于新手和专家的讨论:新手:很在乎自己是否能成功,不知道自己是对是错,不是特别想要学习,只是实现一个立竿见影的目标,不知道如何应付错误,错误出现不知所措.新手需要指令清单,有规则,有顺序.但规则只能让我启程,不会让我走的更远.很显…
知识杂项 obj文件:当前源代码编译成二进制目标文件 exe文件:将.obj文件与库文件.lib等文件链接生成的可执行文件 一个现代编译器的主要工作流程如下: 源程序(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标程序(object code)→ 连接器(链接器,Linker)→ 可执行程序(executables) 映像:因为PE文件在装载时被直接映射到进程的虚拟空间运行.它是进程虚拟空间的映像.所以PE…
一.自我修养路线图 如图,这是笔者所走的路.且不论这路走的对不对,这个过程中行业环境会影响到你,大可不必钻牛角尖.附上这张图的目的是为了说,如果你想成为一个优秀的程序员,那么你一定要有规划.当然,别想着一毕业就能规划的很远,很难,而且也不可能.因为这个过程中行业环境会影响到你.有一点是要做到的,毕业一年左右,一定要有一个相对远一点的规划,这时候你已经对行业环境和一些常用技能有了相应的积累.规划一下接下来1-2个阶段(或者更多)要达到的水平和时间点,然后倒排期(尽量详细),一步一步走下去,水到渠成…
新技术的了解渠道 WWDC开发者大会视频 官方文档 General -> Guides -> iOS x.x API Diffs 程序员的学习 iOS技术的学习 官当文档 Sample Code(示例代码) Guides(指南) Reference(API参考) 博客 CocoaChina 伯乐在线 objc中国 优秀博客汇总 微博 开发者头条 CocoaChina iOS程序犭袁 唐巧_boy 我就叫Sunny怎么了 KITTEN-YANG 微信公众号 iOS开发(iosDevTips) i…