Example #1
0
func (s *WorkingSet) Map(addr, size uint64, mu uc.Unicorn) error {
	alignment := (addr % pagesize)
	base_addr := addr - alignment
	err := mu.MemMap(base_addr, uint64(pagesize))
	if err != nil {
		return err
	}
	err = mu.MemWrite(base_addr, GetMem(base_addr, pagesize))
	if err != nil {
		return err
	}
	s.StoreInWorkingSet(base_addr, mu)
	if addr+size > base_addr+pagesize { //sometimes we might need to map 2 pages
		s.Map(base_addr+pagesize, 1, mu) //map next pages as well
	}
	return nil
}