zoukankan      html  css  js  c++  java
  • 2021-2022-1-diocs-objdump命令学习(测试2.3.1)

    objdump命令学习(测试2.3.1)

    本实验均在openEuler环境下实现

    编辑并运行代码,使结果是后四位学号

    教材2.3讲述的是程序开发相关的内容,即C语言的程序结构和链接等原理知识。
    教材的代码中,t1.c内容为:

    #include <stdio.h>
    
    int g = 100;
    static int s;
    
    int main()
    {
    	int a = 1;
    	static int c = 3;
    	int b = 2;
    	c = mysum(a,b);
    	printf("sum = %d
    ",c);
    	return 1;
    }
    
    

    t2.c代码的内容:

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

    t1.c和t2.c中定义了很多不同的变量,有全局变量、静态变量。同时通过这两个程序,我们可以较好地体会到全局变量和局部变量的区别
    在不修改主函数的情况下,由于打印出的是整型变量c的值,所以只需修改程序让c的值变为我的后四位学号即可。观察后发现改变mysum()函数的返回值就可以了。mysum()将x、y、g进行求和,所以改变g的值就行。将g改为1215,那么输出就是我的学号后四位1218了。
    即,将t1.c中的int g = 100改为int g = 1215
    改完后的代码:

    #include <stdio.h>
    
    int g = 1215;
    static int s;
    
    int main()
    {
    	int a = 1;
    	static int c = 3;
    	int b = 2;
    	c = mysum(a,b);
    	printf("sum = %d
    ",c);
    	return 1;
    }
    
    

    运行结果

    odjdump命令学习

    objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。
    格式
    odjdump [参数] objectfile
    常用参数及其功能

    参数 功能
    -a 显示档案库的成员信息,类似ls -l将lib*.a的信息列出
    -g 显示调试信息
    -d 从objfile中反汇编那些特定指令机器码的section
    -D 与 -d 类似,但反汇编所有section
    -f 显示objfile中每个文件的整体头部摘要信息
    -H 简短的帮助信息
    -s 显示指定section的完整内容。默认所有的非空section都会被显示

    其他参数及其功能

    -b bfdname 
    --target=bfdname 
    指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如: 
    
    objdump -b oasys -m vax -h fu.o 
    显示fu.o的头部摘要信息,明确指出该文件是Vax系统下用Oasys编译器生成的目标文件。objdump -i将给出这里可以指定的目标码格式列表。 
    
    -e 
    --debugging-tags 
    类似-g选项,但是生成的信息是和ctags工具相兼容的格式。 
    
    --prefix-addresses 
    反汇编的时候,显示每一行的完整地址。这是一种比较老的反汇编格式。 
    
    -EB 
    -EL 
    --endian={big|little} 
    指定目标文件的小端。这个项将影响反汇编出来的指令。在反汇编的文件没描述小端信息的时候用。例如S-records. 
    
    -i 
    --info 
    显示对于 -b 或者 -m 选项可用的架构和目标格式列表。 
    
    -j name
    --section=name 
    仅仅显示指定名称为name的section的信息 
    
    -l
    --line-numbers 
    用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。 
    
    -m machine 
    --architecture=machine 
    指定反汇编目标文件时使用的架构,当待反汇编文件本身没描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构. 
    
    --reloc 
    -r 
    显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。 
    
    --dynamic-reloc 
    -R 
    显示文件的动态重定位入口,仅仅对于动态目标文件意义,比如某些共享库。 
    
    -V 
    --version 
    版本信息 
    
    --all-headers 
    -x 
    显示所可用的头信息,包括符号表、重定位入口。-x 等价于-a -f -h -r -t 同时指定。 
    

    推荐学习博客和微信读书链接
    网上有关odjdump的博客大同小异,在此我挑选了其中几篇总结全面、实例易懂的博客:

    讲解有关二进制漏洞和ELF逆向分析的书籍中许多都有对odjdump这一命令进行详细分析和实战实践,结合自己学习ctf中Pwn方向的经验,推荐以下两本书,在微信阅读上均能看到:

    • 从0到1:CTFer成长之路 优点:覆盖了ctf各个题型的知识点,让初学者也能快速入手,其中Pwn中有对反汇编工具和命令的简单介绍,便于odjdump的学习理解
    • CTF竞赛权威指南(Pwn篇) 优点:以Pwn题型为例,对二进制漏洞做了详细讲解,其中有对odjdump的深度实战

    odjdump命令实践

    用objdump分析第1步中的可执行文件和目标文件
    odjdump -d odjectfile进行分析
    可执行文件

    在分析中可以看到程序的文件头(包含代码段、数据段和BSS段的大小)、代码段、数据段以及BSS段

    代码段

    分别对两个C文件编译出的.o文件进行反汇编:


    在完成编译进行链接的时候,链接器就会将所有内容的地址链接起来,从而让程序被打散在内存各个部分的段能够又拼接在一起。如本程序中main函数调用mysum的时候,就会使用跳转,跳转到mysum中的地址。这个部分的生成是在连接成可执行文件的过程中完成的。

  • 相关阅读:
    jython resources
    Installing a Library of Jython ScriptsPart of the WebSphere Application Server v7.x Administration Series Series
    jython好资料
    ulipad install on 64bit win7 has issue
    an oracle article in high level to descibe how to archtichre operator JAVA relevet project
    table的宽度,单元格内换行问题
    Linux常用命令大全
    dedecms系统后台登陆提示用户名密码不存在
    登录织梦后台提示用户名不存在的解决方法介绍
    Shell常用命令整理
  • 原文地址:https://www.cnblogs.com/20191218tangqiheng/p/15487584.html
Copyright © 2011-2022 走看看