先看這樣一篇彙編**
.section .text
.global _start
_start:
nopmovl $4, %eax
movl $1, %ebx
movl $5, %ecx
movl $13, %edx
movl %eax,%ebx
movl $1, %eax
movl $0, %ebx
int $0x80
使用 as -gstabs 20160001.s -o 2016.o得到的是二進位制**
使用ld -o 2016 2016.o得到的是可執行檔案
將中間**也就是二進位制**,通過反彙編得到的是
最左邊一列代表的是相對位置,位置是從0開始的,中間的是機器碼,最右邊一列是彙編指令
可以看到,中間**沒有被裝載進記憶體中,因為位址都是以相對位址來表示的。
將可執行**2016反彙編得到的
同樣的道理,最左邊的是指令位址,但是很明顯,這個位址是32位的,說明**已經裝載進記憶體中了。
這個例子說明了中間**鏈結前和鏈結後之間的區別。
編譯和鏈結的區別
在多道程式環境中,要想將乙個使用者源 變成乙個可以在記憶體中執行的程式,通常分為三個步驟 編譯 鏈結 載入。1 編譯 由編譯程式將使用者的源 編譯成若干個目標模組。2 3 載入 由引導程式將載入模組載入記憶體。編譯和鏈結都是為將使用者程式從硬碟上調入記憶體並將其轉換為可執行程式服務的。用編譯器時的 ...
編譯和鏈結的區別
在多道程式環境中,要想將乙個使用者源 變成乙個可以在記憶體中執行的程式,通常分為三個步驟 編譯 鏈結 載入。1 編譯 由編譯程式將使用者的源 編譯成若干個目標模組。2 3 載入 由引導程式將載入模組載入記憶體。編譯和鏈結都是為將使用者程式從硬碟上調入記憶體並將其轉換為可執行程式服務的。用編譯器時的 ...
編譯和鏈結的區別
1 編譯 由編譯程式將使用者的源 編譯成若干個目標模組。3 載入 由引導程式將載入模組載入記憶體。編譯和鏈結都是為將使用者程式從硬碟上調入記憶體並將其轉換為可執行程式服務的。用編譯器時的compile就是在進行編譯,link就是鏈結,執行程式時可以看到。編譯可以理解為高階語言翻譯為計算機可以理解的二...