Вставить исключение памяти путем доступа к запрещенной области памяти - PullRequest
2 голосов
/ 23 января 2020

Я хочу протестировать функцию обработчика исключений, которую я написал для встроенной системы, и хочу написать тестовый код, который вводит доступ к памяти, которая запрещена.

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

Это код, который я хочу записать эту область памяти доступа в 0xA010000. Почему-то это не кажется мне общим c тестовым кодом.

Существует ли стандартный способ написания таких тестовых кодов на C или C ++. Под Generi c я имею в виду код, который не зависит от карты памяти системы, на которой он работает.

1 Ответ

5 голосов
/ 23 января 2020

Я бы не использовал asm для этого, просто используйте указатель.

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

Это не всегда приведет к исключению, потому что чтение с адреса 0 может быть допустимо в некоторых системах.

То же относится и к любому другому адресу, не существует ни одного адреса, который мог бы выйти из строя во всех системах.

...