計算機基礎 鏈結

2021-09-27 13:26:32 字數 2793 閱讀 8097

gcc編譯器操作指令

1.gcc hello.c

預設的情況下將生成a.out的可執行性檔案,你只需要在終端上輸入./a.out就可以看到執行的結果.

2.指定生成目標檔案的名字那麼你可以加上 -o選項,命令如下:

gcc -o hello hello.c

3.只編譯源程式,這樣可以只檢查編譯時刻的錯誤,有利也除錯程式,用-c選項可以達到這個目的

gcc -c hello.c

結果生成了乙個中間**hello.o檔案

4.優化選項

-o 選項告訴 gcc 對源**進行基本優化. 這些優化在大多數情況下都會使程式執行的更快

-o2 選項告訴 gcc 產生盡可能小和盡可能快的**. -o2 選項將使編譯的速度比使用 -o時慢. 但通常產生的**執行速度會更快

s -s -h命令

**

int

sum(

int*a,

int n)

return s;

}

sum.c

int

sum(

int*a,

int n)

;int array[2]

=;intmain()

main.c

操作

1.gcc -og -o prog main.c sum.c

使用gcc -og -o prog main.c sum.c 呼叫gcc驅動程式構造示例程式,-og生成可除錯檔案,-o生成目標檔案

2.readelf -h prog

讀prog可執行檔案的elf頭

magic為魔數,7f 45 4c 46為標頭檔案elf的魔數;類別為elf32,說明格式是32位版本的;資料採用補碼表示,按小端方式存放;版本是1;作業系統是unix system v;abi版本是0;檔案型別是可執行檔案;系統架構為intel 80386,在32位機器上編譯;程式入口位址是0x80482e0;程式頭表偏移量為52bytes,長32位元組,表項為9,程式頭大小為329b;節頭表起始位置是6144位元組,節頭表長是40位元組,表項為31,節頭表大小為4031b;elf頭大小為52位元組;第28項是字串表。

3.readelf -s prog

讀節頭表資訊

prog為可執行檔案,節頭表描敘了31個節的資訊,起始位置在0x1000;[nr]為節頭表序號,name為節頭表名字,type表示型別,addr表示虛擬位址,off為起始位址,size表示節長;第0個節是空節;.interp節從0x154開始,長0x13,是可裝入的,對齊方式是1位元組對齊,末位址為0x154+0x13=0x167,故.note.abi-tag起始位址為0x168。

main.o一共有12個節頭,起始位置在0x224,.text型別為progbits,起始位址0x34,節大小0x31,儲存可執行**,在執行時被載入器載入到記憶體; .rel.text型別為rel,起始位址0x1b4,節大小0x10; .data型別為progbits,起始位址0x68,節大小0x8,可讀可訪問,儲存被初始化的資料;.bss型別nobits,起始位址0x70,儲存的是未經過初始化的資料,不需要空間,節大小為0,可讀可訪問,儲存未被初始化的靜態變數,及初始化為0的全域性或靜態變數;.comment 型別為progbits,起始位址0x70,節大小0x36,儲存未初始化的全域性變數;.eh_frame型別為progbits,起始位址0xa8,節大小0x44,執行時被載入到記憶體;main.o為可重定位檔案,節頭表資訊與可執行檔案大同小異,可重定位檔案節頭表虛擬位址全為0。

5.readelf -s prog

使用-s檢視符號

name表示符號名,ndx表示符號所處節表,bind表示符號型別,size表示符號所佔位元組數

array是main.o中第3節(.data)的符號,是全域性變數,佔8b;

main是main.o中第1節(.text)的符號,是全域性變數,佔49b;

sum是未定義的符號,不知道型別和大小,全域性的(在其他模組定義)

計算機 計算機基礎整理

大學四年浪費的代價。半夜整理東西 cpu 其功能主要是解釋計算機指令以及處理計算機軟體中的資料。cpu由運算器 控制器和暫存器及實現它們之間聯絡的資料 控制及狀態的匯流排構成。差不多所有的cpu的運作原理可分為四個階段 提取 fetch 解碼 decode 執行 execute 和寫回 writeb...

計算機基礎

1 32位作業系統的記憶體分配 1 32位作業系統 windows linux 支援4g 2 32 記憶體的連續訪問 2 32位作業系統,通常把記憶體分為兩個2g的空間,每個程式執行時,就是每個程序,最大可以使用2g的私有記憶體 0x00000000 0x80000000 即理論支援如下的陣列 ch...

計算機基礎

1 完整的計算機系統 完整的計算機系統應該是由以下幾個部分組成 1.計算機硬體。2.作業系統。3.應用程式。2 計算機硬體介紹 1.控制器 計算機的控制指揮系統,通過產生操作控制訊號作用於計算機其他部件。2.運算器 實現算術運算和邏輯運算的部件。3.儲存器 用來存放各類資料檔案以及程式的部件。4.輸...