zoukankan      html  css  js  c++  java
  • 20135337——linux实践三:ELF文件格式分析(32位系统)

    ELF文件格式分析


    可重定位文件

    十六进制形式显示内容

    显示各个段、符号表相关信息

    查看各个段信息

    elf文件头信息

    段表

    符号表信息

    查看堆栈

    具体分析

    1.ELF文件头信息(小字节优先,均十六进制)

    第一行:

    7f45 4c46 (DEL E L F)  0101 (32位对象 小端法)  0100(文件头版本) 0000 0000 0000 0000
    

    第二行:

    0001(重定位文件) 0003(intel80386处理器)  0000 0001(当前版本)
    0000 0000(没有入口点)
    0000 0000(程序表头偏移地址,没有程序头表)
    

    第三行:

    0000 0214(段表偏移地址)
    0000 0000 (未知处理器特定标识符)
    0034(ELF文件头大小) 由此可知section headers table中每个header的大小是52字节;
    0000(程序表头大小,重定位文件没有程序头表) 
    0000(程序入口个数,重定位文件没有程序头表)
    0028(段表头大小为64字节)
    

    第四行:

    000d(段表头入口个数有13个)
    000a(段名串表索引)由此可知.shstrtab段(符号表)的信息在段表的索引号是10;
    

    由elf头知,段表从0x0000 0214开始,每个节区大小0x0028,共有0x000d个节区,第0x000a为段名串表的索引号;

    第一节区:为空

    第二节区:

    第三节区:

    第四节区:

    五:

    六:

    七:

    八:

    九:

    十:

    十一:(索引号为a)

    十二:

    十三:

    分析

    第二节区:

    001f 0000 :此节区段名在段名串表中的偏移是0000 001f 
    0034 0000 :段的起始位置是0000 0034
    002e 0000 :段大小是0000 002e
    

    第十一节区:

    找到起始位置000001b4,大小0000005f的段名串表

    由2e6c 6574可知,偏移为0000001f的第二节区名,对应ASCII码为.text,可知第二节区为.text段的信息:段起始位置0x0000 0034;段的大小0x0000 002e
    

    .text段


    对应的ASCII码翻译出来对应着MAIN函数的机器代码
    (以此类推,不再赘述!)
    

    对应代码:
    #include <stdio.h>
    main()
    {
    printf("elf");
    }
  • 相关阅读:
    PHP的GD库
    PHP正则表达式
    Redis学习笔记
    C++的vector对象
    Python的with用法理解
    python 类属性与方法
    python lambda表达式
    Python3的decode()与encode()
    PHP的魔法方法__set() __get()
    MySQL的基本知识 -- 函数
  • 原文地址:https://www.cnblogs.com/zzzz5/p/5527450.html
Copyright © 2011-2022 走看看