GNU Binutils工具readelf之Python实现

"""
该程序用于分析elf格式的文件,仅仅是在学习Python的过程中,
用于熟悉各种Python语法
"""
__author__      =   "
makethyme@sina.com.cn"
__version__     =   "$Revision: 0.1 $"
__date__        =   "$Date : 2006/08/05 $"
__copyright__   =   "Copyrigth (c) 2006"
__license__     =   "Python"

import os, sys
from struct import *
global OpenFile, Endian
from optparse import OptionParser
Endian = None


#the struct Elf32_Ehdr defined in Elf.h
#ELF Header
#typedef struct {
# unsigned char e_ident[EI_NIDENT]; //16
# Elf32_Half    e_type;      //2
# Elf32_Half    e_machine;   //2
# Elf32_Word    e_version;   //4
# Elf32_Addr    e_entry;     //4
# Elf32_Off     e_phoff;     //4
# Elf32_Off     e_shoff;     //4
# Elf32_Word    e_flags;     //4
# Elf32_Half    e_ehsize;    //2
# Elf32_Half    e_phentsize; //2
# ELf3_Half     e_phnum;     //2
# Elf32_Half    e_shentsize; //2
# Elf32_Half    e_shnum;     //2
# Elf32_Half    e_shstrndx;  //2
#} Elf32_Ehdr;

EI_NIDENT = 16
SIZEOFSECTIONHEADER = 50
ELFHEADERSIZESUBIDENT = 36
ELFCLASS    = { /
0 : "Invalid Class",/
1 : "ELF32",/
2 : "ELF64"
}
ENCODING    = { /
0 : "Invalid data encoding",/
1 : "2's complement, little endian",/
2 :"2's complement, big endian"
}
VERSION     = {/
0 : "Invalid Version",/
1 : "Current Version"
}
ET_NONE     = 0
ET_REL      = 1
ET_EXEC     = 2
ET_DYN      = 3
ET_CORE     = 4
ET_LOPROC   = 0xff00
ET_HIPROC   = 0xffff

ELFHEADERFILETYPE = {/
ET_NONE   : "No file type", /
ET_REL      : "Relocatable file", /
ET_EXEC    : "Executable file", /
ET_DYN      : "Shared Object file", /
ET_CORE    : "Core file", /
ET_LOPROC : "Processor-specific", /
ET_HIPROC : "Processor-specific"
}

EM_NONE             =   0
EM_M32              =   1
EM_SPACE            =   2
EM_386              =   3
EM_68K              =   4
EM_88K              =   5
EM_860              =   7
EM_MIPS          =   8 
EM_S370          =   9 
EM_MIPS_RS4_BE      =  10 
EM_PARISC           =  15 
EM_VPP550           =  17 
EM_SPARC32PLUS      =  18 
EM_960              =  19 
EM_FR20             =  37 
EM_RH32             =  38 
EM_MCORE            =  39 
EM_ARM             =  40 
EM_OLD_ALPHA        =  41 
EM_SH             =  42 
EM_MIPS_X           =  51 
EM_COLDFIRE         =  52 
EM_68HC12           =  53 
EM_MMA             =  54 
EM_PCP             =  55 
EM_NCPU             =  56 
EM_NDR1             =  57 
EM_STARCORE         =  58 
EM_ME16             =  59 
EM_ST100            =  60 
EM_TINYJ            =  61 
EM_FX66             =  66 
EM_ST9PLUS          =  67 
EM_ST7             =  68 
EM_68HC16           =  69 
EM_68HC11           =  70 
EM_68HC08           =  71 
EM_68HC05           =  72 
EM_SVX              =  73 
EM_ST19             =  74 
EM_VAX              =  75 
EM_PJ               =  99 

ELFHEADERMACHINE = {/
EM_NONE           : "No Machine"                                      ,/
EM_M32            : "AT&T WE 32100"                                  ,/
EM_SPACE          : "SPARC"                                           ,/
EM_386            : "Intel 80386"                                     ,/
EM_68K            : "Motorola 68000"                                  ,/
EM_860            : "Intel 80860"                                     ,/
EM_MIPS        : "MIPS R3000"                                      ,/
EM_S370        : "Amdahl"                                          ,/
EM_MIPS_RS4_BE    : "MIPS R4000 big-endian"                           ,/
EM_PARISC         : "HPPA"                                            ,/
EM_VPP550         : "Fujitsu VPP500"                                  ,/
EM_SPARC32PLUS    : "Sun v8plus"                                      ,/
EM_960            : "Intel 80960"                                     ,/
EM_FR20           : "Fujitsu FR20"                                    ,/
EM_RH32           : "TRW RH32"                                        ,/
EM_MCORE          : "Motorolla MCore"                                 ,/
EM_ARM           : "ARM"                                             ,/
EM_OLD_ALPHA      : "Digital Alpha"                                   ,/
EM_SH           : "Hitachi SH"                                      ,/
EM_MIPS_X         : "Stanford MIPS-X"                                 ,/
EM_COLDFIRE       : "Motorola Coldfire"                               ,/
EM_68HC12         : "Motorola M68HC12"                                ,/
EM_MMA           : "Fujitsu Multimedia Accelerator"                  ,/
EM_PCP           : "Siemens PCP"                                     ,/
EM_NCPU           : "Sony nCPU embedded RISC processor"               ,/
EM_NDR1           : "Denso NDR1 microprocesspr"                       ,/
EM_STARCORE       : "Motorola Star*Core processor"                    ,/
EM_ME16           : "Toyota ME16 processor"                           ,/
EM_ST100          : "STMicroelectronics ST100 processor"              ,/
EM_TINYJ          : "Advanced Logic Corp. TinyJ embedded processor"   ,/
EM_FX66           : "Siemens FX66 microcontroller"                    ,/
EM_ST9PLUS        : "STMicroelectronics ST9+ 8/16 bit microcontroller",/
EM_ST7           : "STMicroelectronics ST7 8-bit microcontroller"    ,/
EM_68HC16         : "Motorola MC68HC16 Microcontroller"               ,/
EM_68HC11         : "Motorola MC68HC11 Microcontroller"               ,/
EM_68HC08         : "Motorola MC68HC08 Microcontroller"               ,/
EM_68HC05         : "Motorola MC68HC05 Microcontroller"               ,/
EM_SVX            : "Silicon Graphics SVx"                            ,/
EM_ST19           : "STMicroelectronics ST19 8-bit microcontroller"   ,/
EM_VAX            : "Digital VAX"                                     ,/
EM_PJ             : "picoJava"                                                      
}
                    
SIZEOFSECTIONENTRY = 40
# Section Header
# typedef struct {
# Elf32_Word    sh_name;
# Elf32_Word    sh_type;
# Elf32_Word    sh_flags;
# Elf32_Addr    sh_addr;
# Elf32_Off     sh_offset;
# Elf32_Word    sh_size;
# Elf32_Word    sh_link;
# Elf32_Word    sh_info;
# Elf32_Word    sh_addralign;
# Elf32_Word    sh_entsize;
# }Elf32_Shdr;


SHT_NULL              = 0
SHT_PROGBITS          = 1
SHT_SYMTAB            = 2
SHT_STRTAB           = 3
SHT_RELA           = 4
SHT_HASH           = 5
SHT_DYNAMIC           = 6
SHT_NOTE           = 7
SHT_NOBITS           = 8
SHT_REL               = 9
SHT_SHLIB             = 10
SHT_DYNSYM            = 11
SHT_LOPROC            = 0x70000000
SHT_HIPROC            = 0x7fffffff
SHT_LOUSER            = 0x80000000
SHT_HIUSER            = 0xffffffff
SHT_VERSYM            = 0x6fffffff
SHT_VERNEED           = 0x6ffffffe

SECTIONTYPE     =    {/
SHT_NULL       :   "NULL",/
SHT_PROGBITS   :   "PROGBITS",/
SHT_SYMTAB     :   "SYMTAB",/
SHT_STRTAB     :   "STRTAB",/
SHT_RELA       :   "RELA",/
SHT_HASH       :   "HASH",/
SHT_DYNAMIC    :   "DYNAMIC",/
SHT_NOTE       :   "NOTE",/
SHT_NOBITS     :   "NOBITS",/
SHT_REL        :   "REL",/
SHT_SHLIB      :   "SHLIB",/
SHT_DYNSYM     :   "DYNSYM",/
SHT_LOPROC     :   "LOPROC",/
SHT_HIPROC     :   "HIPROC",/
SHT_LOUSER     :   "LOUSER",/
SHT_HIUSER     :   "HIUS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值