通过readelf检查目标文件的反汇编时,我看到数据和bss段包含相同的偏移地址。数据部分将包含初始化的全局和静态变量。BSS 将包含未初始化的全局和静态变量。
1 #include<stdio.h>
2
3 static void display(int i, int* ptr);
4
5 int main(){
6 int x = 5;
7 int* xptr = &x;
8 printf("\n In main() program! \n");
9 printf("\n x address : 0x%x x value : %d \n",(unsigned int)&x,x);
10 printf("\n xptr points to : 0x%x xptr value : %d \n",(unsigned int)xptr,*xptr);
11 display(x,xptr);
12 return 0;
13 }
14
15 void display(int y,int* yptr){
16 char var[7] = "ABCDEF";
17 printf("\n In display() function \n");
18 printf("\n y value : %d y address : 0x%x \n",y,(unsigned int)&y);
19 printf("\n yptr points to : 0x%x yptr value : %d \n",(unsigned int)yptr,*yptr);
20 }
输出:
SSS:~$ size a.out
text data bss dec hex filename
1311 260 8 1579 62b a.out
在上面的程序中,我没有任何未初始化的数据,但 BSS 占用了 8 个字节。为什么它占用8个字节?另外,当我反汇编目标文件时,
编辑:
[ 3] .data PROGBITS 00000000 000110 000000 00 WA 0 0 4
[ 4] .bss NOBITS 00000000 000110 000000 00 WA 0 0 4
[ 5] .rodata PROGBITS 00000000 000110 0000cf 00 A 0 0 4
data、rodata 和 bss 具有相同的偏移地址。是不是表示rodata、data、bss指的是同一个地址?Data section、rodata section和bss section是否包含相同地址的数据值,如果是,如何区分data section、bss section和rodata section?