错误的C代码测试错误处理程序

| 我正在搜索可以在基于MCU的系统上测试错误处理程序的“错误/损坏” C代码。 我正在搜索在运行时会中断的代码。 因此,请发疯,您的后兜里只有什么小段代码可用于破坏系统。并且应由错误处理程序进行处理,以避免行为不受控制。 /谢谢 我将从几个示例开始。 写入空指针
int* pointer = 0x0;
*pointer = 0xBAADC0DE;
将值写入无效的指针
int* pointer = 0xCAFEBABE;
*pointer = 0xDEADBEEF;
跳转到无效的函数指针
int (*fpBabe)() = 0xDEADBABE;
fpBabe();
那么,您还有其他一些糟糕的事情要扔给错误处理程序吗?     
已邀请:
除以零(如果编译器试图对其进行优化,则除以简单的数学运算即可得出):
int i = argc;
return 34/(argc-i);
尝试访问高内存地址和低内存地址:
char *v = ~0;
*v = \'\\0\';
如果您有堆mgmt库,请尝试释放两次:
char *ptr = malloc(4096);
free(ptr); free(ptr);
尝试分配内存而不放弃:
for(;;)
    malloc(4096);
尝试耗尽堆栈:
int foo(int arg) { return foo(arg+1); }
int main(int a, char *v[]) { return foo(1); }
    
int f() { return f() + f(); }
int g() { return g(); }
int h() { while(1); }
    
通过相互递归耗尽堆栈(可能更难检测):
int f(void) { return g(); }
int g(void) { return f(); }
int main(void) { return f(); }
...或通过有趣的信号处理:
void handler(int n) { raise(n); raise(n); }
int main(void) { signal(SIGINT, &handler); raise(SIGINT); return 0; }
销毁堆:
for (char *x = malloc(1); *x++ = 42;);
销毁堆并怪free():
char *x = malloc(1);
for (int i = 0; i < 100; x[i++] = 42);
free(x);   // free() will probably segfault
    
在缓冲区末尾写:
 char dest[5];
 const char* src = \"a bigger source\";
 strcpy(dest,src);
要么
 dest[5]=\'\\0\';
    

要回复问题请先登录注册