include #include "vector.h"
int x[2] = ;
int y[2] = ;
int z[2];
int main()
int addcnt = 0;
void addvec(int *x, int *y, int *z, int n)
*1.使用gcc -c main2.c
命令編譯main2.c 檔案,生成main2.o檔案
2.使用readelf -h main2.o
來檢視elf頭
得到elf頭如下:
magic:表示該檔案是elf目標檔案,第乙個位元組7f是固定的數,後面的45 4c 46這三個位元組是e,l,f三個字元的ascii碼形式
類別(class):表示檔案的型別是64位的elf格式
資料(data):表示檔案中型別的格式組織(大端法或小端法) 這裡是小端法
版本(version):elf檔案頭的版本號 這裡的版本號為1
os/abi: 表示作業系統的型別 這裡是unix - system v
abi 版本: 為abi版本號 這裡為0
型別(type):表示elf檔案型別 這裡的是可重定位目標檔案rel (共有三種,還有兩種為可執行目標檔案exec和共享目標檔案)。
系統架構(machine): 表示機器的型別 這裡為x86-64
版本(version)(第二個):表示當前目標檔案的版本號 這裡是1。
入口點位址(entry point address): 表示程式的虛擬位址入口點 這裡為零(因為沒有鏈結,是不可執行的程式)
程式頭起點(start of program headers): 這個程式沒有程式頭
start of section headers: sections 頭的開始處 這裡的1000是十進位制,即開始的位址為0x3e8
標誌(flags):這是乙個與處理器相關聯的標誌 x86 平台(該機器)上此處為 0 。
本頭的大小(size of this header):elf檔案頭的位元組數 這裡是64位元組
標誌頭的大小(size of program headers): 每個程式頭的大小 因為不可執行,所以這裡為0
number of program headers: 程式頭的數目 因為不可執行,所以這裡為0
節頭大小(size of section headers): section頭的大小 這裡是64位元組。
節頭數量(number of section headers): section頭的數量 這裡有13個
字串表索引節頭(section header string table index): section 頭字串表索引號 這裡的索引號為10
1.使用gcc main2.c addvec.c -o main2
命令編譯,生成main2.o檔案
2.使用readelf -h main2
來檢視elf頭
此處出現的錯誤:開始用的readelf -h main2.o 結果出錯
得到elf頭如下:
格式無誤但是上傳失敗 下面寫出不同處
型別:exec可執行檔案
入口點位址:0x400430
程式頭起點:64
start of section headers: 6808
標誌頭的大小(size of program headers): 56
number of program headers: 9
節頭數量(number of section headers): 31
字串表索引節頭(section header string table index): 28
從這裡可以看到,之前因為不可執行顯示為0的地方有了數值
3.使用readelf -s main2.o
命令
得到elf頭如下:
4.使用命令gcc main2.c addvec.c -fpic -shared -o main2.so
生成main2.so,之後使用命令readelf -s main2.so
得到結果:
可以發現,value是有值的,addvec的ndx也是有值的
5.使用命令readelf -s main2.o
得到結果:
首位址 名稱 大小
00000000 elf頭(指向0x3e8) 無
00000040 .text 41
00000088 .data 10
00000098 .bss 00
000000a5 .comment 36
00000118 .symtab 168
00000280 .strtab 22
000002a8 .rela.text c0
00000380 .shstrtab 61
000003e8 節頭表
類似與袁春風老師ppt中的表,但順序不同
6.使用命令objdump -s main2.o
得到結果:
objdump -d main2
進行鏈結操作
計算機系統基礎學習技術日誌三(I O)
linux中有一句話叫,一切皆檔案。每個linux檔案都有乙個型別來表明它在系統中的角色 1.普通檔案 包含任意資料。應用程式常常要區分文字檔案和二進位制檔案,文字檔案即只含有ascii或unicode字元的普通檔案,二進位制檔案是所有其他檔案 2.目錄檔案 包含一組鏈結的檔案。其中每個鏈結都將乙個...
深入計算機系統基礎 系統級I O技術日誌
概念 所有的i o裝置都被模型化為檔案,而所有的輸人作對相應檔案的讀和寫來執行。這種將裝置優雅地對映為檔案的方式,允許linux核心出乙個簡單 低階的應用介面,稱為unix 1 o。於 深入計算機系統基礎 第三版 分別呼叫read和write函式來執行輸入和輸出 觀察以下 what would th...
計算機系統基礎
includeint main return 0 如果將表示式換成 2147483647 1 2147483647 結果又會怎麼樣呢 編譯器如何處理字面量 高階語言中運算規則 高階語言與指令之間的對應 機器指令的執行過程 機器級資料的表示和運算 sum int a unsigned int len ...