首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获无效的操作码rip rsp

捕获无效的操作码rip rsp
EN

Stack Overflow用户
提问于 2010-09-21 15:53:32
回答 2查看 10.7K关注 0票数 3

我们在其中一个应用程序的/var/log/messages中看到了下面提到的几条消息:

代码语言:javascript
复制
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

我不能弄清楚这些输出意味着什么,以及我们如何跟踪导致问题的函数/代码。

EN

回答 2

Stack Overflow用户

发布于 2010-09-21 16:40:41

通常,这意味着您的程序的指令指针指向数据或垃圾。这通常是由于写到零散指针之类的东西造成的。

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

票数 2
EN

Stack Overflow用户

发布于 2010-09-21 17:08:23

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

根据上面的说明,我认为RIP是“寄存器(?)指令指针”,RSP是“寄存器堆栈指针”,在这种情况下,你可以使用调试器,在指定的地址(RIP)上设置一个执行硬件断点,并跟踪调用它的东西。(看起来你使用的是linux或unix,所以这是相当模糊的)。如果您使用的是windows,请尝试使用自定义异常筛选器来捕获EXCEPTION_ILLEGAL_INSTRUCTION事件,以获取更多信息

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3758301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档