链接

首先会用:

 

《为何需要链接?》

  在汇编中我们总是需要通过跳转指令,到我们想要执行的地方去执行指令

 那么我们如何指定跳转的位置呢?

  汇编中通过符号表示

 但是符号终究是符号,机器看不懂

 在整个代码都定型后,无序改动后

 我们就可以通过链接,将符号替换成

  如:

  这样的编号使得机器知道我们跳转的地方(编号实际上就是通过代码的行号得到的)

  (注意代码没有定型时,代码的行数是不确定的,

   这个时候链接,一旦代码改动,要跳转的位置又不对了

  所以我们需要代一切确定后,再链接)

 

《链接的执行步骤》

   

 

如图现在有两个模块

  这两个模块中都有符号应用

 

 

如图:

  我们可以知道链接的过程还将不同模块的同一类部分进行了合并

  从而可以使用原先在某一模块中的符号

 

我们可以知道 test.o是可重定向目标文件

  其文件代码和数据地址都从0开始

 为何经过链接后的可重定向目标文件变成可执行文件后,其代码和数据地址就变了呢?

  

  因为这个时候程序已经固定下来了

 程序需要被发到物理地址中,那么这之前就要知道其放到虚拟地址的哪个地方

 通过图可知数据段和代码段放到虚拟地址的位置

  为(只是这个例子中)

 我们如果反汇编这个程序,看到第一个代码段的地址应该是这个虚拟地址的位置

  即

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-04-27 17:02  次林梦叶  阅读(46)  评论(0)    收藏  举报