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

时间:2014-09-23 09:25:13

标签: c++ c linux assembly intel

我有一个linux" .a"编译为x86工作的库。我没有这个库的源代码,程序员也没有给我这个。在使用这种架构的PC中运行我的程序没有任何问题,但是最近我推出了一个带有Intel Quark处理器的嵌入式系统。这个处理器有一个简化的指令集,所以当我编译我的程序并尝试运行它时,我得到了一个明确的信息:"非法指令"。

我知道这不是一个内存违规问题,因为当我使用GDB进行调试时,它在一个像CMOVE这样的操作码的指令中完全失败,CMOVE属于Pentium Pro处理器中引入的CMOVxx指令集。在我的嵌入式Linux系统(Ubuntu 14.04)/ proc / cpuinfo" flags"字段没有显示" cmov",所以这已得到确认。

那么,我该如何覆盖这个问题?

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

欢迎任何建议。

1 个答案:

答案 0 :(得分:5)

  1. 您可以尝试在内核中模拟CMOV的this uncommitted kernel patch

  2. 您只能在程序中安装SIGILL信号处理程序和emulate the instruction