常量区的修改

#include <Windows.h>
#include <stdio.h>
int main()
{
	const char* a = "123456";
	const char* b = "123456";
	char* c = "654321";

	DWORD oldprot; 
	HANDLE hProcess = GetCurrentProcess(); 
	VirtualProtectEx(hProcess, (LPVOID)b, 7, PAGE_EXECUTE_READWRITE, &oldprot);
	WriteProcessMemory(hProcess, (LPVOID)b, (LPVOID)c, 7, NULL);

	printf("%s \n", a);
}


以上程序输出  654321


“123456”是储存在常量区的,也就是说是在编译的时候就确定的,a、b、c只是一个指向常量区的指针。

由于编译器的优化,此时 a = b

VirtualProtectEx : Changes the protection on a region of committed pages in the virtual address space of a specified process.

WriteProcessMemory:Writes data to an area of memory in a specified process. The entire area to be written to must be accessible or the operation fails.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值