程序员的自我修养—目标文件里有什么

程序员的自我修养—目标文件里有什么

第三章的后半部分

链接的接口

  • 链接的本质是要把多个不同的目标文件之间相互"粘"在一起。为了使不同的目标文件可以相互粘合,这些目标文件之间必须有固定的格式。
    • 在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。
Read more
程序员的自我修养—目标文件里有什么

程序员的自我修养—目标文件里有什么

  • 2020.2.2 更新补充内容

迟到的更新

在开始这一章之前,先复习一下gcc的操作

复习

  • -c
    只编译,不链接成为可执行文件。编译器只是由输入的 .c 等源代码文件生成 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
  • -o output_filename
    确定输出文件的名称为output_filename。同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出默认的可执行文件 a.out
Read more
汇编基础-13

汇编基础-13

对之前学过的内容的补充(结合专业课)

11.14更新

关于NASM和MASM

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,用着非常的不舒服

但是这不影响对于一些共性的东西的学习,写这篇博客的存在意义就是补充这些我遗漏的东西

Read more
程序员的自我修养——编译和链接

程序员的自我修养——编译和链接

编译和链接

在一般的IDE中,编译和链接被合并在了一起,称为构建(build),往往一些本质的东西是无法了解到

被隐藏的过程

在Linux下如果使用gcc编译一个c语言程序,只需最简单的命令:
gcc hello.c
./a.out

事实上,上述的过程可以分为4个步骤:

  • 预处理(Prepressing)
  • 编译(Compilation)
  • 汇编(Assembly)
  • 链接(Linking)

GCC编译过程

Read more
程序员的自我修养——温故而知新

程序员的自我修养——温故而知新

开新坑,记录我学习《程序员的自我修养》这本书的笔记,加上自己的实践和好的例子

更新不会很快,大二太忙了

配合计算机系统基础这门专业课程一起学习

引言

《程序员的自我修养》这本书讲的主要是操作系统内核,装载,链接等一些技术,理解操作系统如何让一段代码工作起来,如何让不同的二进制模块协同工作。

你可以不自己造轮子,但你应该了解轮子的构造,而且越详尽越好,这就是程序员的自我修养吧。————《程序员的自我修养》

推荐书籍
《深入理解计算机系统》(Computer System A Programmer’s Perspective, Randal E. Bryant和David O’Halaron著)
《Advanced Programing in the UNIX Environment, Second Edition》(UNIX程序设计的“圣经”)

Read more