MCPcopy Create free account
hub / github.com/qilingframework/qiling / loadStack

Method loadStack

qiling/loader/macho.py:501–560  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

499
500 # TODO: add size check
501 def loadStack(self):
502
503 argvs_ptr = []
504 envs_ptr = []
505 apple_ptr = []
506
507 all_str = self.make_string(self.argvs, self.envs, self.apples)
508 self.push_stack_string(all_str)
509 ptr = self.stack_sp
510
511 for item in self.argvs[::-1]:
512 argvs_ptr.append(ptr) # need pack and tostring
513 self.ql.log.debug('add argvs ptr {}'.format(hex(ptr)))
514 ptr += len(item) + 1
515
516 for item in self.envs[::-1]:
517 envs_ptr.append(ptr)
518 self.ql.log.debug('add envs ptr {}'.format(hex(ptr)))
519 ptr += len(item) + 1
520
521 for item in self.apples[::-1]:
522 apple_ptr.append(ptr)
523 self.ql.log.debug('add apple ptr {}'.format(hex(ptr)))
524 ptr += len(item) + 1
525
526 ptr = self.stack_sp
527 self.push_stack_addr(0x0)
528 ptr -= 4
529
530 for item in apple_ptr:
531 self.push_stack_addr(item)
532 ptr -= 4
533
534 self.push_stack_addr(0x0)
535 ptr -= 4
536
537 for item in envs_ptr:
538 ptr -= 4
539 self.push_stack_addr(item)
540
541 self.push_stack_addr(0x0)
542 ptr -= 4
543
544 for item in argvs_ptr:
545 ptr -= 4
546 self.push_stack_addr(item)
547 self.ql.log.debug("SP 0x%x, content 0x%x" % (self.stack_sp, item))
548 argvs_ptr_ptr = ptr
549
550 self.push_stack_addr(self.argc)
551 ptr -= 4
552 self.ql.log.debug("SP 0x%x, content 0x%x" % (self.stack_sp, self.argc))
553
554 if self.using_dyld:
555 ptr -= 4
556 #ql.log.info("Binary Dynamic Entry Point: {:X}".format(self.binary_entry))
557 self.push_stack_addr(self.macho_file.header_address)
558 # self.push_stack_addr(self.binary_entry)

Callers 1

loadMachoMethod · 0.95

Calls 5

make_stringMethod · 0.95
push_stack_stringMethod · 0.95
push_stack_addrMethod · 0.95
formatMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected