链接
文章平均质量分 56
regrecall
这个作者很懒,什么都没留下…
展开
-
编译和链接
<br />1.GCC 的编译过程<br />预处理cpp gcc -E hello.c -o hello.i or cpp hello.c > hello.i <br />主要是展开所有的#define #include,#if 等等<br />编译<br />进行编译原理那些(词法分析,语法分析,语义分析,优化等)<br />gcc -S hello.i -o hello.s<br />生成的就是汇编代码。<br />汇编<br />将汇编器是将汇编代码转变成及其可以执行的指令。<br />as he原创 2011-01-08 15:07:00 · 423 阅读 · 0 评论 -
静态链接
<br />根据前面知道的目标文件的各个段,<br />现在想把多个目标文件链接到一起,为什么不简单就把各个目标的各个段相加合起来?<br />1. 输出文件将会有很多零散的段<br />2.由于每个段都需要和有一定的地址和空间对齐,所以这样做也很造成很多内部碎片<br /> <br />很自然的我们想起 相似的段进行合并。<br />关于2步链接:<br />1. 空间与地址分配<br />2. 符号解析与重定位。<br />关于 内存地址 都是指的VMA, 虽然很多地方LMA 都是等于 VMA的,但是有原创 2011-01-13 13:03:00 · 440 阅读 · 0 评论 -
Windows PE/COEF
<br />Windows 平台下的可执行文件采用PE的格式, VISUAL C++编译产生的目标文件仍然是COFF,<br />以为为了兼容以前的DOS可执行文件,所以出了PE相对于COFF的超集来处理。<br /> <br />VISUAL C++<br />#pragma data_seg("FOO")<br />int global = 1;<br />#pragma data_seg(".data")<br />表示先全局变量 global 存到FOO段中间去,然后在回到.data段。<br />原创 2011-01-13 23:34:00 · 429 阅读 · 0 评论 -
共享库版本
<br />1.ABI<br />ABI (Application Binary Interface) , 二进制接口,<br />对添加和修改接口, 其他的删除和改名等都不兼容。<br />2.SO_NAME<br />libname.so.x.y.z<br />最前面使用前缀"lib", 中间是库的名字和后缀".so",<br />x:主版本号,y:次版本号,z:发布版本号。<br />共享库的so_name,保存在".dynamic"段的。<br /> <br />关于链接版本的问题,<br />因为原创 2011-03-14 21:07:00 · 454 阅读 · 0 评论 -
DLL动态链接
<br /><br />1. DLL<br />Windows 下的DLL 文件和EXE 文件实际上是一个概念,都是PE 格式的二进制文件。<br />利用DLL 实现共享数据<br />在一个DLL 中需要进程间共享的变量分离出来,放到另外一个数据段中,然后将这个数据段设置成进程间可以共享的, 一个DLL 中有两个数据段,一个是用于进程共享的,另外一个是用于私有的。<br />导出符号: __declspec(dllexport)<br />最终链接时,我们必须把与DLL 一起产生原创 2011-03-15 23:04:00 · 280 阅读 · 0 评论 -
内存
<br /><br />1. 内存布局<br />Kernel space 0xffffffff<br /> <br />操作系统挪用出来的kernel 空间<br /> <br />Stack 0xc0000000<br /> <br />Dynamic libraries 0x40000000<br /> <br />Heap<br /> <br />Read/writ原创 2011-03-23 22:08:00 · 509 阅读 · 0 评论