zoukankan      html  css  js  c++  java
  • 20135337——Linux实践三:ELF文件格式(64位系统,简单分析)

    ELF文件格式简单分析

    (具体分析见上一篇ELF文件格式32位系统)

    ELF-header

    第一行:
    457f 464c :魔数;
    0201 :64位系统,小端法
    01 :文件头版本
    剩余默认0;
    
    第二行:
    0001 :重定位文件
    003e :x86-64处理器体系结构
    0000 0001 :当前版本
    0000 0000 0000 0000 :没有入口点
    
    第三行:
    0000 0000 0000 0000 :没有程序头表
    0000 0000 0000 0308 :段表偏移地址
    
    第四行:
    0000 0000 :处理器特定标志
    0040 :elf文件头大小
    0000 :重定位文件没有程序头表
    0000 :重定位文件没有程序头表
    0040 :段头大小64字节,section header table中每个header的大小
    000d :段表入口有13个,段表有13段
    000a :段表字符串在段表中的索引号,.shstrab段的段表索引号10
    

    Elf文件头的数据结构存储在位偏移0x0000 0000 0000 0000~~~0x0000 0000 0000 0039,共40h字节,即64字节;

    段表存储在0x0000 0000 0000 0308~~~0x0000 0000 0000 0648,共40h*13=340h字节

    查看符号表的数据结构

    12个符号

    Section

    .text位偏移+段长度=.data的段偏移   0x003c+0x0040=0x007c
    0x0061+0x02a0=0x0301;
    0x0308+0x0340=0x648;
    .shstrtab section与.symtab section之间存储的是段表;
    

    注意:Address是section在内存中的虚拟地址,.o文件不需要执行,这里都是0;
    Off是section与文件头之间的偏移;
    Size是文件里面section占用的大小;
    

    .text section是可执行指令的集合
    位偏移0x0000 0040,size=0x0000 003c(即60字节)
    

    .data section是初始化后数据的集合
    位偏移0x0000 007c,size=0
    

    .symtab section存放所有section中定义的符号名字
    .strtab section位偏移0x0000 0208,size=0x0000 001b
    

  • 相关阅读:
    正向代理和反向代理
    Unicode
    utf-8
    ISO 8895-1
    ProtocalBuffers学习记录
    C#基础知识
    MSBuild学习记录
    Linux学习笔记
    Jenkins学习记录
    CruiseControl.Net学习记录
  • 原文地址:https://www.cnblogs.com/zzzz5/p/5527545.html
Copyright © 2011-2022 走看看