本次实验用的是书上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: