Is it normal that despite what the documentation says, MS version of memcpy has protection against overlapping memory buffers? or I'm just misunderstanding something/there are errors in the code below.
Code: Select all
memcpy(dest, src, size) {
return DllCall("MSVCRT.dll\memcpy", "Ptr", dest, "Ptr", src, "UInt", size)
}
memmove(dest, src, size) {
return DllCall("MSVCRT.dll\memmove", "Ptr", dest, "Ptr", src, "UInt", size)
}
VarSetCapacity(var, 5000)
var := "012345678901234567890123456789012345678901234567890123456789"
offset_src := 20
offset_dest := 31
; even swapping the offsets doesn't make memcpy() produce a different
; result than memmove()
;
size := 30
buf1 := var
buf2 := var
buf1_dest := &buf1 + offset_dest
buf2_dest := &buf2 + offset_dest
buf1_src := &buf1 + offset_src
buf2_src := &buf2 + offset_src
memcpy( buf1_dest, buf1_src, size)
memmove(buf2_dest, buf2_src, size)
if(buf1 != buf2)
msgbox % buf1
. "`n" buf2