深入理解计算系统第七章

本次实验用的是书上P465的程序 代码如下

1   main.c

int sum(int *a,int n);

int array[2]={1,2};

int main()
{
    int val=sum(array,2);
    return val;
}



2   sum.c

int sum(int *a,int n)
{   int i,s=0;

    for(i=0;i<n;i++)
    {    s+=a[i];
    }
    return s;
}

1.编译main.c文件 gcc -c main.c     然后 readelf -h main.o  查看  结果如下

因为系统用的中文所以有的翻译了有的却没有翻译(感觉有点奇怪!)

2.编译sum.c文件 gcc main.c sum.c -o main     然后 readelf -h main查看  结果如下

3.用readelf -s main.o  查看符号表  结果如下

发现  初始化的array   main函数都是全局的

4.用readelf -s sum.o  查看符号表  结果如下 

sum 也为全局的

5.用 readelf -S main.o 查看节头表 结果如下

There are 12 section headers,starting at offset 0x2d0:

转换为表  大概是这个样子 

在ELF头中main func的size 为33 =0x21

array 的size 为8=0x8

所以是相对应的

6.用 readelf -S sum.o 查看节头表 结果如下

There are 12 section headers,starting at offset 0x248:

结论:初始化了的变量放在.data  函数放在.text

发布了19 篇原创文章 · 获赞 23 · 访问量 6826

猜你喜欢

转载自blog.csdn.net/qq_43176366/article/details/101794013