|
@@ -1,3 +1,6 @@
|
|
|
+class NotELFFileError(Exception):
|
|
|
+ pass
|
|
|
+
|
|
|
class ELFFile:
|
|
|
EI_NIDENT = 16
|
|
|
|
|
@@ -23,7 +26,7 @@ class ELFFile:
|
|
|
def my_assert(self, expectation, result):
|
|
|
if not expectation == result:
|
|
|
#print "'%x','%x' %s" % (ord(expectation), ord(result), self.name)
|
|
|
- raise ValueError("%s is not an ELF" % self.name)
|
|
|
+ raise NotELFFileError("%s is not an ELF" % self.name)
|
|
|
|
|
|
def __init__(self, name, bits = 0):
|
|
|
self.name = name
|
|
@@ -32,7 +35,7 @@ class ELFFile:
|
|
|
|
|
|
def open(self):
|
|
|
if not os.path.isfile(self.name):
|
|
|
- raise ValueError("%s is not a normal file" % self.name)
|
|
|
+ raise NotELFFileError("%s is not a normal file" % self.name)
|
|
|
|
|
|
self.file = file(self.name, "r")
|
|
|
self.data = self.file.read(ELFFile.EI_NIDENT+4)
|
|
@@ -49,24 +52,24 @@ class ELFFile:
|
|
|
self.bits = 64
|
|
|
else:
|
|
|
# Not 32-bit or 64.. lets assert
|
|
|
- raise ValueError("ELF but not 32 or 64 bit.")
|
|
|
+ raise NotELFFileError("ELF but not 32 or 64 bit.")
|
|
|
elif self.bits == 32:
|
|
|
self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32))
|
|
|
elif self.bits == 64:
|
|
|
self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS64))
|
|
|
else:
|
|
|
- raise ValueError("Must specify unknown, 32 or 64 bit size.")
|
|
|
+ raise NotELFFileError("Must specify unknown, 32 or 64 bit size.")
|
|
|
self.my_assert(self.data[ELFFile.EI_VERSION], chr(ELFFile.EV_CURRENT) )
|
|
|
|
|
|
self.sex = self.data[ELFFile.EI_DATA]
|
|
|
if self.sex == chr(ELFFile.ELFDATANONE):
|
|
|
- raise ValueError("self.sex == ELFDATANONE")
|
|
|
+ raise NotELFFileError("self.sex == ELFDATANONE")
|
|
|
elif self.sex == chr(ELFFile.ELFDATA2LSB):
|
|
|
self.sex = "<"
|
|
|
elif self.sex == chr(ELFFile.ELFDATA2MSB):
|
|
|
self.sex = ">"
|
|
|
else:
|
|
|
- raise ValueError("Unknown self.sex")
|
|
|
+ raise NotELFFileError("Unknown self.sex")
|
|
|
|
|
|
def osAbi(self):
|
|
|
return ord(self.data[ELFFile.EI_OSABI])
|