A错误 str未赋初值
B在x16系统下正确,部分编译器正确
C++ x32下可以写成
1
2
3
4
5
DWORDflOldProtect;
HANDLEhProc = GetCurrentProcess();
VirtualProtectEx(hProc, str4, strlen(str4)+1, PAGE_READWRITE, &flOldProtect);
strcpy(str4,"HELLO4");
VirtualProtectEx(hProc, str4, strlen(str4)+1, flOldProtect, &flOldProtect);
VirtualProtectEx用于修改页属性。
赋值语句char *str4="string";
编译器会将"string"字符串放在.rdata字段中,映射到应用程序空间后页属性为PAGE_READONLY(只读)。
VirtualProtectEx将页属性改为PAGE_READWRITE(读写)。
否则会产生0xC0000005异常,类似于“该内存不为Write”的错误。