'Writes a memory object to a `page`
:param page_base:   The base address of the page.
:param mo:          The memory object.
:param page:        (optional) the page to use.
:param overwrite:   (optional) If False, only write to currently-empty memory.'

def _apply_object_to_page(self, page_base, mo, page=None, overwrite=True):

    page_num = (page_base / self._page_size)
    try:
        page = (self._get_page(page_num, write=True, create=(not self.allow_segv)) if (page is None) else page)
    except KeyError:
        if self.allow_segv:
            raise SimSegfaultError(mo.base, 'write-miss')
        else:
            raise
    if (self.allow_segv and (not (page.concrete_permissions & Page.PROT_WRITE))):
        raise SimSegfaultError(mo.base, 'non-writable')
    page.store_mo(self.state, mo, overwrite=overwrite)
    return True
