diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-12-23 16:42:08 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-12-23 16:42:37 +0100 |
| commit | 3a0d984146e8b3428c4445d37709f2af9d98fb5a (patch) | |
| tree | 0dde449942b0fd5a192e80945a2e4f1fb98bb991 /miasm/loader/pe.py | |
| parent | a2d2e3bd87636c2ccca1afecc5c7c20360aa43fa (diff) | |
| download | focaccia-miasm-3a0d984146e8b3428c4445d37709f2af9d98fb5a.tar.gz focaccia-miasm-3a0d984146e8b3428c4445d37709f2af9d98fb5a.zip | |
Loader/PE: add minimal tls support
Diffstat (limited to 'miasm/loader/pe.py')
| -rw-r--r-- | miasm/loader/pe.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/miasm/loader/pe.py b/miasm/loader/pe.py index f6b56a3c..6ab6451e 100644 --- a/miasm/loader/pe.py +++ b/miasm/loader/pe.py @@ -1602,6 +1602,31 @@ class Symb(CStruct): ("res3", "u16")] +class DirTls(CStruct): + _fields = [ + ("data_start", "ptr"), + ("data_end", "ptr"), + ("addr_index", "ptr"), + ("callbacks", "ptr"), + ("size_of_zero", "u32"), + ("characteristics", "u32") + ] + + def build_content(self, raw): + dirtls = self.parent_head.NThdr.optentries[DIRECTORY_ENTRY_TLS] + of1 = dirtls.rva + if of1 is None: # No Tls + return + raw[self.parent_head.rva2off(of1)] = bytes(self) + + def set_rva(self, rva, size=None): + self.parent_head.NThdr.optentries[DIRECTORY_ENTRY_TLS].rva = rva + if not size: + self.parent_head.NThdr.optentries[DIRECTORY_ENTRY_TLS].size = len(self) + else: + self.parent_head.NThdr.optentries[DIRECTORY_ENTRY_TLS].size = size + + DIRECTORY_ENTRY_EXPORT = 0 DIRECTORY_ENTRY_IMPORT = 1 DIRECTORY_ENTRY_RESOURCE = 2 |