ELF檔案學習 bss

2021-07-16 08:40:22 字數 2247 閱讀 8462

elf格式與bss段

linux下目標檔案的bss段、資料段、**段

elf(executable linkable format)是linux系統下的一種可執行可鏈結檔案的格式,是coff格式的變種。在linux系統中包括了可重定位檔案(.o檔案),可執行檔案(/bin/bash檔案),共享目標檔案(.so)和核心轉儲檔案(core dump)。

elf檔案頭(elf header):位於elf檔案的頭部,包含了描述整個檔案的基本屬性。

**段(.text):用於存放程式**,唯讀屬性

資料段(.data):用於存放程式中經初始化的全域性變數和靜態區域性變數,讀寫屬性

bss段(.bss)(block started by symbol):用於存放程式中未經初始化的全域性變數和靜態區域性變數。在目標檔案中,這個段並不佔據實際空間,它僅僅只是乙個佔位符。

// test1.c

int a = 1;

static

int b = 4;

int c;

static

int d;

char *s1 = "1234";

int main()

編譯檔案

gcc test1.c -o test1.o
檢視編譯後檔案的資訊

objdump -sx test1.o
sections:

idx name size vma lma file off algn

14.rodata

0000000e 0000000000400550

0000000000400550

00000550

2**2

contents, alloc, load, readonly, data

23.data

00000020

00000000006008a8 00000000006008a8 000008a8 2**3

contents, alloc, load, data

24.bss

00000010

00000000006008c8 00000000006008c8 000008c8 2**2

alloc

sections展示了不同的段的大小。

symbol

table:

00000000006008bc l o .data 0000000000000004 b

00000000006008cc l o .bss 0000000000000004 d

00000000006008c0 g o .data 0000000000000008 s1

00000000006008d0 g o .bss 0000000000000004 c

00000000006008b8 g o .data 0000000000000004 a

symbol table展示了不同的變數是存在哪的。這裡就可以看到

data段有:

而bss段有:

contents of section .rodata:

400550

01000200

31323334

00333435

3600

....1234

.3456

. contents of section .

data:

6008a8 00000000

00000000

00000000

00000000

......

......

....

6008b8 01000000

04000000

54054000

00000000

......

..t.@...

..

可以看到rodata段中有我們定義的1234和3456

而data段裡有1和4(小端)分別對應a和b

還可以讀取elf檔案,命令是readelf

ELF格式與bss段

elf executable linkable format 是linux系統下的一種可執行可鏈結檔案的格式,是coff格式的變種。在linux系統中包括了可重定位檔案 o檔案 可執行檔案 bin bash檔案 共享目標檔案 so 和核心轉儲檔案 core dump elf檔案頭 elf heade...

ELF格式與bss段

elf executable linkable format 是linux系統下的一種可執行可鏈結檔案的格式,是coff格式的變種。在linux系統中包括了可重定位檔案 o檔案 可執行檔案 bin bash檔案 共享目標檔案 so 和核心轉儲檔案 core dump elf檔案頭 elf heade...

elf檔案格式學習

elf 檔案格式學習 文章出處 結合例項解讀 elf檔案 閱讀筆記 bkbll bkbll cnhonker.net,kbll tom.com 自unix 系統實驗室 usl 開發和發布了 executable and linking format elf 這樣的二進位制格式以後,在 nix 系統上...