* renamed file to constants.py
* defined stuff for program header
diff --git a/elftools/elf/constants.py b/elftools/elf/constants.py
new file mode 100644
index 0000000..1c64a8f
--- /dev/null
+++ b/elftools/elf/constants.py
@@ -0,0 +1,40 @@
+# Constants and flags, placed into classes for namespacing
+
+class SHN_INDICES(object):
+ """ Special section indices
+ """
+ SHN_UNDEF=0
+ SHN_LORESERVE=0xff00
+ SHN_LOPROC=0xff00
+ SHN_HIPROC=0xff1f
+ SHN_ABS=0xfff1
+ SHN_COMMON=0xfff2
+ SHN_HIRESERVE=0xffff
+
+
+class SH_FLAGS(object):
+ """ Flag values for the sh_flags field of section headers
+ """
+ SHF_WRITE=0x1
+ SHF_ALLOC=0x2
+ SHF_EXECINSTR=0x4
+ SHF_MERGE=0x10
+ SHF_STRINGS=0x20
+ SHF_INFO_LINK=0x40
+ SHF_LINK_ORDER=0x80
+ SHF_OS_NONCONFORMING=0x100
+ SHF_GROUP=0x200
+ SHF_TLS=0x400
+ SHF_MASKOS=0x0ff00000
+ SHF_MASKPROC=0xf0000000
+
+
+class P_FLAGS(object):
+ """ Flag values for the p_flags field of program headers
+ """
+ PF_X=0x1
+ PF_W=0x2
+ PF_R=0x4
+ PF_MASKOS=0x00FF0000
+ PF_MASKPROC=0xFF000000
+
diff --git a/elftools/elf/enums.py b/elftools/elf/enums.py
index 0b76c52..0762979 100644
--- a/elftools/elf/enums.py
+++ b/elftools/elf/enums.py
@@ -82,3 +82,16 @@
_default_='RESERVED',
)
+# p_type in the program header
+ENUM_P_TYPE = dict(
+ PT_NULL=0,
+ PT_LOAD=1,
+ PT_DYNAMIC=2,
+ PT_INTERP=3,
+ PT_NOTE=4,
+ PT_SHLIB=5,
+ PT_PHDR=6,
+ PT_LOPROC=0x70000000,
+ PT_HIPROC=0x7fffffff,
+)
+
diff --git a/elftools/elf/flags.py b/elftools/elf/flags.py
deleted file mode 100644
index 32a1ed3..0000000
--- a/elftools/elf/flags.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Flag values, placed into classes for namespacing
-
-class SH_FLAGS(object):
- SHF_WRITE=0x1
- SHF_ALLOC=0x2
- SHF_EXECINSTR=0x4
- SHF_MERGE=0x10
- SHF_STRINGS=0x20
- SHF_INFO_LINK=0x40
- SHF_LINK_ORDER=0x80
- SHF_OS_NONCONFORMING=0x100
- SHF_GROUP=0x200
- SHF_TLS=0x400
- SHF_MASKOS=0x0ff00000
- SHF_MASKPROC=0xf0000000
-
diff --git a/elftools/elf/structs.py b/elftools/elf/structs.py
index 090a8a9..8c610dc 100644
--- a/elftools/elf/structs.py
+++ b/elftools/elf/structs.py
@@ -36,6 +36,7 @@
self.Elf_sxword = SBInt32 if self.elfclass == 32 else SBInt64
self._create_ehdr()
+ self._create_phdr()
self._create_shdr()
self._create_sym()
@@ -63,6 +64,30 @@
self.Elf_half('e_shstrndx'),
)
+ def _create_phdr(self):
+ if self.elfclass == 32:
+ self.Elf_Phdr = Struct('Elf_Phdr',
+ Enum(self.Elf_word('p_type'), **ENUM_P_TYPE),
+ self.Elf_offset('p_offset'),
+ self.Elf_addr('p_vaddr'),
+ self.Elf_addr('p_paddr'),
+ self.Elf_word('p_filesz'),
+ self.Elf_word('p_memsz'),
+ self.Elf_word('p_flags'),
+ self.Elf_word('p_align'),
+ )
+ else:
+ self.Elf_Phdr = Struct('Elf_Phdr',
+ Enum(self.Elf_word('p_type'), **ENUM_P_TYPE),
+ self.Elf_word('p_flags'),
+ self.Elf_offset('p_offset'),
+ self.Elf_addr('p_vaddr'),
+ self.Elf_addr('p_paddr'),
+ self.Elf_word('p_filesz'),
+ self.Elf_word('p_memsz'),
+ self.Elf_word('p_align'),
+ )
+
def _create_shdr(self):
self.Elf_Shdr = Struct('Elf_Shdr',
self.Elf_word('sh_name'),