@@ -218,6 +218,8 @@ def __init__(self, ql: 'R2Qiling', baseaddr=(1 << 64) - 1, loadaddr=0):
218
218
self ._r2c = libr .r_core .r_core_new ()
219
219
self ._r2i = ctypes .cast (self ._r2c .contents .io , ctypes .POINTER (libr .r_io .struct_r_io_t ))
220
220
self ._setup_mem (ql )
221
+ if ql .code is None : # ql is initialized with file
222
+ self ._load_symbol_from_file (ql .path )
221
223
222
224
def _qlarch2r (self , archtype : QL_ARCH ) -> str :
223
225
return {
@@ -251,13 +253,27 @@ def _setup_mem(self, ql: 'R2Qiling'):
251
253
self ._cmd (f"e,asm.arch={ arch } ,asm.bits={ ql .arch .bits } " )
252
254
self ._cmd ("oba" ) # load bininfo and update flags
253
255
254
- def _cmd (self , cmd : str ) -> str :
256
+ def _load_symbol_from_file (self , path : str ):
257
+ r2c = libr .r_core .r_core_new ()
258
+ path = path .encode ()
259
+ fh = libr .r_core .r_core_file_open (r2c , path , UC_PROT_READ | UC_PROT_EXEC , self .loadaddr )
260
+ libr .r_core .r_core_bin_load (r2c , path , self .baseaddr )
261
+ symbols = self ._cmdj ("isj" , r2c )
262
+ for sym in symbols :
263
+ name = sym ['name' ] # name is shoter, but starting with . causes error
264
+ name = sym ['flagname' ] if name .startswith ('.' ) else name
265
+ if name : # add each symbol as flag if symbol name is not empty
266
+ self ._cmd (f"f { name } { sym ['size' ]} @ { sym ['vaddr' ]} " )
267
+ libr .r_core_free (r2c )
268
+
269
+ def _cmd (self , cmd : str , r2c = None ) -> str :
270
+ r2c = r2c or self ._r2c
255
271
r = libr .r_core .r_core_cmd_str (
256
- self . _r2c , ctypes .create_string_buffer (cmd .encode ("utf-8" )))
272
+ r2c , ctypes .create_string_buffer (cmd .encode ("utf-8" )))
257
273
return ctypes .string_at (r ).decode ('utf-8' )
258
274
259
- def _cmdj (self , cmd : str ) -> Union [Dict , List [Dict ]]:
260
- return json .loads (self ._cmd (cmd ))
275
+ def _cmdj (self , cmd : str , r2c = None ) -> Union [Dict , List [Dict ]]:
276
+ return json .loads (self ._cmd (cmd , r2c ))
261
277
262
278
@property
263
279
def offset (self ) -> int :
0 commit comments