【发布时间】:2013-03-28 09:42:56
【问题描述】:
我正在使用 buildroot。 编译工作正常,但目标系统上的二进制文件显示“非法指令”
我用过strace:
execve("/opt/busybox", ["/opt/busybox"], [/* 8 vars */]) = 0 brk(0)
= 0 --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLTRP, si_addr=0xa3f20} --- +++ 被 SIGILL 杀死 +++ 非法指令
然后是 IDA。
原因是 SVC 指令(si_addr 在我尝试的所有二进制文件中都指向它)
我应该怎么做才能防止 GCC 使用这条指令?
【问题讨论】:
-
这是
SuperVisor Call,用于进行系统调用——你需要它。问题可能是内核与您要构建的内容不匹配。 -
是的。内核已经编译和安装。我现在不能改变它:(我也没有来自现有内核的源代码/配置。
-
我重新标记了 Linux(不是 SVC),这是一些 Microsoft Web 服务器的东西,我尝试update the wiki。我将研究 EABI 与 OABI,这会改变
SVC/SWI调用接口。请参阅trap.c 您可以在内核命令行中使用user_debug=0xff引导。 -
那么,EABI 是 SVC 而 OABI 是 SWI 吗?
标签: linux gcc arm buildroot uclibc