about summary refs log tree commit diff stats
path: root/miasm/loader/pe.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2019-12-23 16:42:08 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2019-12-23 16:42:37 +0100
commit3a0d984146e8b3428c4445d37709f2af9d98fb5a (patch)
tree0dde449942b0fd5a192e80945a2e4f1fb98bb991 /miasm/loader/pe.py
parenta2d2e3bd87636c2ccca1afecc5c7c20360aa43fa (diff)
downloadfocaccia-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.py25
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