odjdump

代码

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\n", c);

}


extern int g;
int mysum(int x, int y)
{
        return x+y+g;
}

结果截图:

odjdump

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文件的结构如下图:
odjdump
参照教材24,25页:
可以通过objdump -d -j .data t1.o来观察t1.c的数据字段
.data字段存储已初始化非0全局变量和静态变量,需要分配空间用于存储数据
odjdump
从中可以看出在文件中存放的变量初始化的值为0x0512,0x03也就是1298和3
可以通过objdump -d -j .bss t1.o来观察t1.c的bss字段
.bss用来存放程序中未初始化的全局变量的一块内存区域。
odjdump
没有未初始化的变量
可以通过objdump -d -j .text t1.o来观察t1.c的text字段
.text用于存放程序代码的区域, 编译时确定。
odjdump
t2文件同理
odjdump

odjdump

可执行文件分析

odjdump
在内存401166中的汇编代码链接到了 40118f, 40118f是mysum函数的堆栈地址,也就可以链接到了mysum函数

上一篇:C语言:斐波那契数列


下一篇:java中关于string类和常量池的一点猜想