Linux中使用Intel Quark的共享库中的非法指令

Illegal instruction in a shared library in Linux using an Intel Quark

本文关键字:共享 指令 非法 Quark Intel Linux      更新时间:2023-10-16

我有一个linux".a"库,它是为x86而编译的。我没有这个库的源代码,程序员也不会给我。我在这种架构的PC上运行程序没有问题,但最近我买了一个带有Intel Quark处理器的嵌入式系统。这个处理器有一个精简的指令集,所以当我编译程序并尝试运行它时,我得到了一条明确的消息:"非法指令"。

我知道这不是内存冲突问题,因为当我使用GDB调试它时,它在操作码为CMOVE的指令中完全失败,CMOVE属于奔腾Pro处理器中引入的CMOVxx指令集。在我的嵌入式linux系统(Ubuntu 14.04)/proc/cpuinfo"flags"字段没有显示"cmov",所以这一点得到了证实。

那么,我该如何解决这个问题呢?

有没有任何包装器可以将这个操作码翻译成另一个夸克友好的指令?我知道如何在Windows中使用OllyDbg(它允许ASM修补和保存可执行文件)来完成这项工作,但据我所知,在Linux中没有类似的解决方案。

欢迎提出任何建议。

  1. 您可以尝试这个未提交的内核补丁,它在内核中模拟CMOV。

  2. 您可以安装SIGILL信号处理程序,并仅在程序中模拟指令。