Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 陷阱无效操作码rip rsp_C++_Dmesg - Fatal编程技术网

C++ 陷阱无效操作码rip rsp

C++ 陷阱无效操作码rip rsp,c++,dmesg,C++,Dmesg,对于我们的一个应用程序,我们在/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 prot

对于我们的一个应用程序,我们在/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
Sep 18 03:24:23内核:应用程序名称[14682]陷阱无效操作码rip:f6c6e3ce rsp:ffc366bc错误:0
...
9月18日03:19:35内核:应用程序名称[4434]常规保护rip:f6cd43a2 rsp:ffdfab0c错误:7b2

我无法确定这些输出意味着什么,以及我们如何跟踪导致问题的函数/代码。此外,“陷阱无效操作码”和“一般保护”是什么意思?

通常意味着程序的指令指针指向数据或垃圾。这通常是由写错误的指针之类的东西引起的


一种情况是,您的代码(通过一个散乱的指针)写入某个类的虚拟表,将成员函数地址替换为无意义的地址。下次调用类的某个虚拟函数时,程序会将垃圾解释为地址并跳转到该地址。如果这个地址上的任何数据恰好不是处理器的有效机器代码指令,您就会看到这个错误

还有另一种可能会导致“无效”操作码,那就是硬件不支持较新的操作码/指令集(SSE 4/5),或者它不是来自正确的制造商(AMD和Intel都有一些只在其处理器上工作的特定操作码),或者只是没有执行某些操作的权限(尽管这可能会显示为其他内容)


从上面看,我将RIP设置为“寄存器(?)指令指针”,RSP设置为“寄存器堆栈指针”,在这种情况下,您可以使用调试器,在指定地址(RIP)上设置执行硬件断点,并追溯调用它的内容。(看起来您使用的是linux或unix,所以这是非常模糊的)。如果您在windows上,请尝试使用自定义异常筛选器捕获
异常\u非法\u指令
事件,以获取更多信息

我们使用的是Linux,并且是否使用了一个工具来确定问题所在?RIP和RSP值实际上意味着什么?它们是函数地址吗?如果是,请查找address大于该值将提示出问题的位置appx。但是,对于64位和32位体系结构,谁会生成可执行文件的映射文件呢?不幸的是,我的linux知识非常贫乏(我是一个只使用windows的人,完全懒散),但是是的,RIP和RSP应该是内存指针,如果指针在所有或大部分时间都相同,您将在该位置(RIP)设置断点,否则您需要让调试器捕获无效事件并回溯调用堆栈。