zoukankan      html  css  js  c++  java
  • 2.3.1测试

    任务

    0 推荐在OpenEuler系统中实现
    1 编辑并运行2.3.1中的代码,要求在不修改t2.c 和 t1.c中main函数中的代码的情况下,程序运行结果是你的后四位学号。提交代码和运行结果截图。
    2 网上学习objdump命令,提交不少于5篇博客链接和微信读书上的图书链接,并给出你认为最好的讲解资源的链接或图书名及章节
    3 用objdump分析第1步中的可执行文件和目标文件,提交你的分析截图以及如何和教材讲解内容对应的,比如obj文件的文件头,代码段,数据段等,可执行文件如何链接mysum的。

    1.编辑并运行2.3.1中的代码

    要求在不修改t2.c 和 t1.c中main函数中的代码的情况下,程序运行结果是你的后四位学号。


    t1.c:

    int g = 1228;
    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);
    }

    t2.c:

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

     

     

     

    2.网上学习objdump命令

    提交不少于5篇博客链接和微信读书上的图书链接,并给出你认为最好的讲解资源的链接或图书名及章节


    博客链接:

    Linux命令之objdump简单使用(这个适合小白,中间有示例)

    (41条消息) objdump命令的使用_北落师门'的专栏-CSDN博客(这个也有实例,适合入门)

    (41条消息) objdump命令详解go0dStudy的博客-CSDN博客objdump(功能介绍相对详细完整)

    使用readelf和objdump剖析目标文件 - 背包旅行的码农的世界 - OSCHINA - 中文开源技术交流社区(有更加完整的配图,讲解详细,易于理解)

     

    3.用objdump分析第1步中的可执行文件和目标文件

    提交你的分析截图以及如何和教材讲解内容对应的,比如obj文件的文件头,代码段,数据段等,可执行文件如何链接mysum的。


     

     

     

    各分组名称及意义:

    Size: 段的大小,字节为单位 VMA:段在虚拟地址中的位置 LMA:段在加载地址中的位置 File off:File offset,段的起始位置 Algn:字节对齐方式,2**2表示2的平方即为4,2**3表示2的3次方即为8。

    部分头文件意义:

    .text:已编译程序的机器代码。 .rodata:只读数据,比如printf语句中的格式串和开关(switch)语句的跳转表。 .data:已初始化的全局C变量。局部C变量在运行时被保存在栈中,既不出现在.data中,也不出现在.bss节中。 .bss:未初始化的全局C变量。在目标文件中这个节不占据实际的空间,它仅仅是一个占位符。目标文件格式区分初始化和未初始化变量是为了空间效率在:在目标文件中,未初始化变量不需要占据任何实际的磁盘空间。

     

     

    根据objdump -t a.out查看a.out任务表

    objdump -f t1.o查看t1.o的头文件

    t1.o的文件起始地址是0x0,但是ELF文件起始地址不是

    objdump -S t1.o反汇编目标文件:

    根据objdump -t t1.o查看t1.o符号表

    执行文件链接mysum

    编译器编译源代码之后生成目标文件,目标文件的类型为ELF,在Linux下为.o文件,Windows下对应的文件为.obj文件。ELF文件存放数据格式固定。

    在解析文件的时候,就是按照它每个字段的数据结构进行逐字解析的。ELF文件结构信息定义在/usr/include/elf.h中。结构图如下:

     

    • ELF Header

    ELF Header是ELF文件的第一部分,通过readelf -h t1.o查看

    • Section

    Section部分主要存放的是机器指令代码和数据,执行命令readelf -S -W t1.o同样可以查看对Section部分的解析。对于这部分内容,重点是.text(存放代码)、.data(存放全局静态变量和局部静态变量)和.bss(存未初始化的全局变量和局部静态变量)。命令objdump -h t1.o 可以查看每个段的大小

    objdump -s -d t1.o对代码段(.text)的解析结果

    分别对t1.o和t2.o执行objdump -d


    参考链接:

    https://www.cnblogs.com/ZhaoKevin/p/12329667.html

    https://blog.csdn.net/beyondioi/article/details/7796414

    https://blog.csdn.net/qq_41683305/article/details/105375214#:~:text=objdump

    https://my.oschina.net/weitao520lin/blog/3101177

    https://www.cnblogs.com/ffffatal/p/15463350.html

  • 相关阅读:
    n的阶乘
    二叉树遍历
    二分查找练习
    字符串中最长回文序列求解
    复数集合
    AppCrawler自动化遍历使用详解(版本2.1.0 )(转)
    谷歌驱动下载链接
    谷歌浏览器插件
    Pycharm破解方法
    go学习链接
  • 原文地址:https://www.cnblogs.com/Aegon-Targaryen/p/15486912.html
Copyright © 2011-2022 走看看