Linux中使用Intel Quark的共享库中的非法指令
Illegal instruction in a shared library in Linux using an Intel Quark
我有一个linux".a"库,它是为x86而编译的。我没有这个库的源代码,程序员也不会给我。我在这种架构的PC上运行程序没有问题,但最近我买了一个带有Intel Quark处理器的嵌入式系统。这个处理器有一个精简的指令集,所以当我编译程序并尝试运行它时,我得到了一条明确的消息:"非法指令"。
我知道这不是内存冲突问题,因为当我使用GDB调试它时,它在操作码为CMOVE的指令中完全失败,CMOVE属于奔腾Pro处理器中引入的CMOVxx指令集。在我的嵌入式linux系统(Ubuntu 14.04)/proc/cpuinfo"flags"字段没有显示"cmov",所以这一点得到了证实。
那么,我该如何解决这个问题呢?
有没有任何包装器可以将这个操作码翻译成另一个夸克友好的指令?我知道如何在Windows中使用OllyDbg(它允许ASM修补和保存可执行文件)来完成这项工作,但据我所知,在Linux中没有类似的解决方案。
欢迎提出任何建议。
-
您可以尝试这个未提交的内核补丁,它在内核中模拟CMOV。
-
您可以安装
SIGILL
信号处理程序,并仅在程序中模拟指令。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- C++:对不存在的命名空间使用命名空间指令
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- 函数名是c中该函数的第一条指令的地址吗
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 错误:无效的预处理指令 #i 的意思是 #if?
- Linux中使用Intel Quark的共享库中的非法指令
- MFC文档模板中的共享处理程序预处理器指令
- 为共享文件使用预处理器指令