unicorn-engine / unicorn

Unicorn CPU emulator framework (ARM, AArch64, M68K, Mips, Sparc, PowerPC, RiscV, S390x, TriCore, X86)
http://www.unicorn-engine.org
GNU General Public License v2.0
7.33k stars 1.31k forks source link

fix uc_mem write with cow when using upper half of the address #1920

Closed PhilippTakacs closed 5 months ago

PhilippTakacs commented 5 months ago

I missed a bug in my last fix.

uc->target_page_align is a uint32_t. When the binary not will only invert the 32 bit of the value. Used this in a binary and operator with a uint64_t will case the upper 32bit of the address to be 0. Therefor the bug only appears when the upper 32bit of the address are used.

Now a local uint64_t variable is used for the alignemend and the test uses a not page alligned address which does not fit in 32bit.

wtdcode commented 5 months ago

Here you go, thanks!