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

学习链接

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函数

posted @ 2021-10-31 16:24  20191301  阅读(114)  评论(0)    收藏  举报