代码
int g=1298;
int h;
static int s;
main(int argc, char *argv[])
{
int a=1;
int b;
static int c=3;
b=2;
c=mysum(a,b);
printf("sum=%d
", c);
}
extern int g;
int mysum(int x, int y)
{
return x+y+g;
}
结果截图:
odjdump
学习链接
https://blog.csdn.net/wwchao2012/article/details/79980514
https://www.cnblogs.com/yfii/p/14661346.html
https://www.cnblogs.com/baiduboy/p/7061365.html
https://blog.csdn.net/vincent3678/article/details/107684870?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1
https://blog.csdn.net/swedenfeng/article/details/53395030
http://blog.chinaunix.net/uid-27018250-id-3867588.html
分析目标文件
目标文件的文件类型为ELF,ELF文件存放数据的格式也是固定的,计算机在解析目标文件时,就是按照它每个字段的数据结构进行逐字解析的。ELF文件结构信息定义在/usr/include/elf.h中,整个ELF文件的结构如下图:
参照教材24,25页:
可以通过objdump -d -j .data t1.o
来观察t1.c的数据字段
.data字段存储已初始化非0全局变量和静态变量,需要分配空间用于存储数据
从中可以看出在文件中存放的变量初始化的值为0x0512,0x03也就是1298和3
可以通过objdump -d -j .bss t1.o
来观察t1.c的bss字段
.bss用来存放程序中未初始化的全局变量的一块内存区域。
没有未初始化的变量
可以通过objdump -d -j .text t1.o
来观察t1.c的text字段
.text用于存放程序代码的区域, 编译时确定。
t2文件同理
可执行文件分析
在内存401166中的汇编代码链接到了 40118f, 40118f是mysum函数的堆栈地址,也就可以链接到了mysum函数