"""
该程序用于分析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