about summary refs log tree commit diff stats
path: root/miasm/loader/pe.py
diff options
context:
space:
mode:
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