0

ビルドルートを使用しています。コンパイルは正常に機能しますが、ターゲット システムのバイナリには「不正な命令」と表示されます

私はstraceを使用しました:

execve("/opt/busybox", ["/opt/busybox"], [/* 8 変数 */]) = 0 brk(0)
= 0 --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLTRP, si_addr= 0xa3f20} --- +++ SIGILL によって強制終了 +++ 不正な命令

次にIDA。

その理由は SVC 命令です (si_addr は、私が試したすべてのバイナリでそれを指していました)

GCC でこの命令を使用しないようにするにはどうすればよいですか?

4

1 に答える 1

1

この問題を解決したようです。

その理由は、EABI / OABI の設定ミスです。Artless Noiseのおかげで! OABI 構成が必要です。

また、理由は本当にわかりませんが、GCC 4.3.x でのみ動作を開始します。gcc 4.7.x のデフォルトのビルドルート構成では、eabi/oabi は効果がありません。

最後に、追加の GCC オプションを設定します。

--with-march=armv5te --with-cpu=arm926ej-s --with-mtune=arm926ej-s --enable-multilib --disable-libssp --enable-languages=c,c++

于 2013-03-29T15:07:31.323 に答える