通过访问禁止的内存位置注入内存异常

Inject a memory exception by accessing forbidden memory location

我想测试我为嵌入式系统编写的异常处理函数,并想编写一个测试代码来注入对禁止访问的内存的访问。

void Test_Mem_exception
    {
    __asm(
    "LDR R0, =0xA0100000\n\t"
    "MOV R1, 0x77777777\n\t"
    "STR R1, [R0,#0]"
);

这是我要在 0xA010000 写入访问内存位置的代码。不知何故,这对我来说似乎不是一个通用的测试代码。

有没有标准的方法可以用 C 或 C++ 编写此类测试代码。我所说的通用是指独立于它运行的系统的内存映射的代码。

我不会为此使用 asm,只需使用指针即可。

void Test_Mem_exception
{
  /* volatile, to suppress optimizing/removing the read statement */
  volatile int *ptr = 0xC0C0C0C0;
  int value = *ptr;
}

这不会总是导致异常,因为从地址 0 读取在某些系统上可能有效。

这同样适用于任何其他地址,不存在任何在所有系统上都会失败的地址。