程序员的自我修养—目标文件里有什么
第三章的后半部分
链接的接口
- 链接的本质是要把多个不同的目标文件之间相互"粘"在一起。为了使不同的目标文件可以相互粘合,这些目标文件之间必须有固定的格式。
- 在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。
第三章的后半部分
迟到的更新
在开始这一章之前,先复习一下gcc的操作
NASM全称The Netwide Assembler,是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。NASM支持大量的文件格式,包括Linux,*BSD,a.out,ELF,COFF,Mach−O,Microsoft 16−bit OBJ,Win32以及Win64,同时也支持简单的二进制文件生成。它的语法被设计的简单易懂,相较Intel的语法更为简单,支持目前已知的所有x86架构之上的扩展语法,同时也拥有对宏命令的良好支持。
摘自百度百科
宏汇编程序(MASM)是具有宏加工功能的汇编程序。可以用它定义含参数的程序段,在使用的位置上调用它们,汇编时将进行宏(指令)展开,把宏定义所预先定义的指令目标代码插在该位置上。
前面的学习都用到的是MASM,而学校实验用的是NASM,什么DOSBOX,DEBUG,用着非常的不舒服
但是这不影响对于一些共性的东西的学习,写这篇博客的存在意义就是补充这些我遗漏的东西
在一般的IDE中,编译和链接被合并在了一起,称为构建(build),往往一些本质的东西是无法了解到
在Linux下如果使用gcc编译一个c语言程序,只需最简单的命令:
gcc hello.c
./a.out
事实上,上述的过程可以分为4个步骤:
开新坑,记录我学习《程序员的自我修养》这本书的笔记,加上自己的实践和好的例子
更新不会很快,大二太忙了
配合计算机系统基础这门专业课程一起学习
《程序员的自我修养》这本书讲的主要是操作系统内核,装载,链接等一些技术,理解操作系统如何让一段代码工作起来,如何让不同的二进制模块协同工作。
你可以不自己造轮子,但你应该了解轮子的构造,而且越详尽越好,这就是程序员的自我修养吧。————《程序员的自我修养》
推荐书籍
《深入理解计算机系统》(Computer System A Programmer’s Perspective, Randal E. Bryant和David O’Halaron著)
《Advanced Programing in the UNIX Environment, Second Edition》(UNIX程序设计的“圣经”)