summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordusoleil <howcansocksbereal@gmail.com>2022-03-11 10:27:58 -0500
committerdusoleil <howcansocksbereal@gmail.com>2022-03-13 23:27:30 -0400
commit84aae4be53028e543fa9b00f1bc53d6c2420cc51 (patch)
treef38bf64f26f5905415f87c91e6f9f907f268314f
parent352fe42c6e5e4f5996289bc0d9479c1be19c1117 (diff)
downloadlib-des-gnux-84aae4be53028e543fa9b00f1bc53d6c2420cc51.tar.gz
lib-des-gnux-84aae4be53028e543fa9b00f1bc53d6c2420cc51.zip
sploit: cache ELF loads
With recursive ELF loads, there is the possibility of loading in a heavy ELF (like libc) multiple times. Hiding instantiation of the class behind a factory method and caching instances should eliminate this problem. Signed-off-by: dusoleil <howcansocksbereal@gmail.com>
-rw-r--r--tools/sploit/sploit/rev/elf.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/sploit/sploit/rev/elf.py b/tools/sploit/sploit/rev/elf.py
index a748f10..bdced0a 100644
--- a/tools/sploit/sploit/rev/elf.py
+++ b/tools/sploit/sploit/rev/elf.py
@@ -1,6 +1,16 @@
from sploit.rev import ldd, r2
-class ELF:
+__ELF_CACHE__ = {}
+
+def ELF(path):
+ if path in __ELF_CACHE__:
+ return __ELF_CACHE__[path]
+ else:
+ elf = __ELF__(path)
+ __ELF_CACHE__[path] = elf
+ return elf
+
+class __ELF__:
def __init__(self, path):
self.path = path
self.sym = r2.get_elf_symbols(self.path)