摘要:
可执行文件格式主要是:Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format)他们都是COFF(Common file format)格式的变种。目标文件就是源代码编译后但未进行链接的那些中间文件。动态链接库(windows的.dll和Linux的.so)及静态链接库(Windows的.lib和Linux的.a)文件都按照可执行文件格式存储。在Linux下可以使用file命令来查看相应的文件格式:$ file first.shfirst.sh: POSIX shell script, ASCII text ex 阅读全文
摘要:
从源文件到可以行文件的过程:预处理——编译——汇编——链接第一步预编译:$gcc -E hello.c -o hello.i或者$cpp hello.c > hello.i注:‘-E’选项表示只进行预编译;cpp是预编译器预编译主要处理一‘#’开头的预编译指令:将所有的"#define"删除,并且展开所有的宏定义处理所有条件预编译指令处理"#include",将包含的文件插入到该预编译指令的位置。注意,这个过程是递归进行删除所有注释添加行号和文件名标识,以便于调试和编译产生的错误和警告保留所有"#pragma"指令,编译器需要使 阅读全文
摘要:
从helloworld说起:#include <stdio.h>int main(){printf("Hello,World\n");return 0;}你能回答如下问题吗? ·程序为什么要经过编译才能运行?·编译器把C语言转化为可执行的机器码的过程做了什么,怎么做的 ·最后编译出来的可执行文件里面是什么?除了机器码之外还有什么?它们是怎么存放,怎么组织的?·#include<stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的? ·不同的编译器(VC,GCC 阅读全文
摘要:
这段时间都没有更新博客,主要在看“程序员的自我修养”这本书,去年暑假的时候看过一下,但是看得很快,而且对着纸质书看,也没有什么具体的操作,更没有对不懂的问一下Google或者百度了。在这接近一个月的时间里面我重新看了这本书,首先花了一个多星期看了一遍,然后又花了两个星期来做笔记,把里面的代码都跑了一遍,使用的环境是:Visual Studio 11 Beta 、Ubuntu10.04还有Cygwin(简单的就用这个)。对不懂的基本上都在网上找了相应的东西来扩展学习,总的来说映像还是较深了,收获比较大。看的过程中有些部分还是比较痛苦的,但是也有觉得比较新奇很有兴趣。目标就在那里,不能因为需要.. 阅读全文