Clear memory before restore.
This fixes #1136 by unmapping everything before applying the restore operation. This will make sure that after a restore, the memory state will be exactly the same as it was when the memory's save method was called.
Checklist
Which kind of PR do you create?
- [x] This PR only contains minor fixes.
- [ ] This PR contains major feature update.
- [ ] This PR introduces a new function/api for Qiling Framework.
Coding convention?
- [x] The new code conforms to Qiling Framework naming convention.
- [x] The imports are arranged properly.
- [x] Essential comments are added.
- [x] The reference of the new code is pointed out.
Extra tests?
- [x] No extra tests are needed for this PR.
- [ ] I have added enough tests for this PR.
- [ ] Tests will be added after some discussion and review.
Changelog?
- [ ] This PR doesn't need to update Changelog.
- [ ] Changelog will be updated after some proper review.
- [ ] Changelog has been updated in my PR.
Target branch?
- [x] The target branch is dev branch.
One last thing
- [x] I have read the contribution guide
@wtdcode @elicn Do you think mem.restore() should have the semantic to clear all memory?
That is a good question. I tend to say "yes", because restore operations are usually used to overwrite an existing state with a previous one. Since we restore the entire memory map here (as opposed to restoring each memory region individually), I think this is expected.
What is the status of this PR? I see some tests are failing on ubuntu, but I don't really see why. Personally, I think that if the tests assume the old behaviour (where a restore would not clear the memory state), they should be changed.