我们在其中一个应用程序的/ var / log / messages中看到以下两个消息:
Sep 18 03:24:23 <machine_name> kernel: application_name[14682] trap invalid opcode rip:f6c6e3ce rsp:ffc366bc error:0
...
Sep 18 03:19:35 <machine_name> kernel: application_name[4434] general protection rip:f6cd43a2 rsp:ffdfab0c error:7b2
我无法确定这些输出的含义以及我们如何跟踪导致问题的功能/代码。另外,“陷阱无效操作码”和“一般保护”是什么意思?
最佳答案
通常这意味着程序的指令指针指向数据或垃圾。这通常是由于写入流浪指针等引起的。
一种情况是您的代码(通过杂散指针)写在某个类的虚拟表上,用废话替换成员函数地址。下次调用该类的虚函数之一时,您的程序会将垃圾解释为一个地址,然后跳转到该地址。如果位于此地址的任何数据碰巧不是对您的处理器有效的机器代码指令,您将看到此错误。
关于c++ - 捕获无效的操作码rip rsp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3758301/