What does “*((char*)-1) = 'x';” code mean?
我在读取redis源代码时遇到问题,有人能告诉我debug.c中
1 | *((char*)-1) = 'x'; |
更新
我在debug.c中找到了op中提到的行,我们可以从上面的两行代码中看到:
1 | redisLog(REDIS_WARNING,"(forcing SIGSEGV to print the bug report.)"); |
同样的代码也可以在
原件
这看起来像一个调试工具,我们可以从本文档中看到Redis调试指南,相关部分说:
Redis has a command to simulate a segmentation fault (in other words a bad crash) using the DEBUG SEGFAULT command (don't use it against a real production instance of course ;). So I'll use this command to crash my instance to show what happens in the GDB side:
并显示该gdb输出:
1 2 3 4 5 6 7 8 | (gdb) continue Continuing. Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0xffffffffffffffff debugCommand (c=0x7ffc32005000) at debug.c:220 220 *((char*)-1) = 'x'; ^^^^^^^^^^^^^^^^^^^ |
它所做的是将
这是未定义的行为,正如在线程中所讨论的,在C中生成segfault最简单的标准一致性方法是什么?这是不可信赖的。编译器变得越来越聪明,而且有一些著名的例子,其中编译器聪明地以意外和错误的方式利用未定义的行为。
在你的表达中,
您将值