44#
55
66from qiling import Qiling
7- from qiling .loader .loader import QlLoader
7+ from qiling .loader .loader import QlLoader , Image
88from qiling .os .memory import QlMemoryHeap
99
10+
1011class QlLoaderBLOB (QlLoader ):
1112 def __init__ (self , ql : Qiling ):
1213 super ().__init__ (ql )
@@ -16,13 +17,19 @@ def __init__(self, ql: Qiling):
1617 def run (self ):
1718 self .load_address = self .ql .os .entry_point # for consistency
1819
19- self .ql .mem .map (self .ql .os .entry_point , self .ql .os .code_ram_size , info = "[code]" )
20- self .ql .mem .write (self .ql .os .entry_point , self .ql .code )
20+ code_begins = self .load_address
21+ code_size = self .ql .os .code_ram_size
22+ code_ends = code_begins + code_size
2123
22- heap_address = self .ql .os .entry_point + self .ql .os .code_ram_size
23- heap_size = int (self .ql .os .profile .get ("CODE" , "heap_size" ), 16 )
24- self .ql .os .heap = QlMemoryHeap (self .ql , heap_address , heap_address + heap_size )
24+ self .ql .mem .map (code_begins , code_size , info = "[code]" )
25+ self .ql .mem .write (code_begins , self .ql .code )
2526
26- self .ql .arch .regs .arch_sp = heap_address - 0x1000
27+ # allow image-related functionalities
28+ self .images .append (Image (code_begins , code_ends , 'blob_code' ))
29+
30+ # FIXME: heap starts above end of ram??
31+ heap_base = code_ends
32+ heap_size = int (self .ql .os .profile .get ("CODE" , "heap_size" ), 16 )
33+ self .ql .os .heap = QlMemoryHeap (self .ql , heap_base , heap_base + heap_size )
2734
28- return
35+ self . ql . arch . regs . arch_sp = code_ends - 0x1000
0 commit comments