构造一点错误代码,向字符串存储的常量区(.rdata)写数据,使OS报0xC0000005错误.
/// @file exam_test.cpp
/// @brief 修改PE文件.rdata段属性, 使常量区可写
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
void fnTest();
int main()
{
fnTest();
return 0;
}
void fnTest()
{
char * pBuf = "Hello";
/// 构造一个错误操作, 准备做改.rdata段属性的试验
*pBuf = 'h'; ///< 如果不改常量区.rdata段属性到可写, 这里引起0xC0000005报错
pBuf = pBuf; ///< bp
}
然后修改PE文件的.rdata区属性为可写, 执行到 *pBuf = 'h'后,就不会报错了.
找到.rdata区,看到原来的属性是0x40, 不可写
改成0xC0
现在运行到 *pBuf = 'h'后,就不会报错了.