2013-03-28 66 views
0

我正在使用buildroot。 編制工作正常,但目標系統上的二進制表示, 「非法指令」如何禁用SVC ARM指令(gcc,uclibc,buildroot)?

我用strace的:

的execve( 「/選擇/ busybox的」,[ 「/選擇/ busybox的」],[/ * 8變量* /])= 0 brk(0)
= 0 --- SIGILL {si_signo = SIGILL,si_code = ILL_ILLTRP,si_addr = 0xa3f20} --- +++死於SIGILL +++非法指令

然後是IDA。

原因是SVC指令(si_addr指出,它在所有的二進制我試過)

我應該怎麼做,以防止使用GCC該指令?

+0

這就是'SuperVisor Call',用於進行系統調用 - 您將需要它。問題可能是內核和你正在嘗試構建的內容之間的不匹配。 – auselen 2013-03-28 09:57:23

+0

是的。內核已經編譯和安裝。我現在不能改變它:(我也沒有從exesting內核的源/配置 – HardRock 2013-03-28 10:11:44

+0

我重新簽署了Linux(而不是SVC),這是一些微軟web服務器的東西,我試圖[更新wiki](http:// stackoverflow .com/review/suggested-edits/1590553)。我將調查* EABI *與* OABI *,這會改變'SVC/SWI'調用接口。請參閱[trap.c](https://git.kernel.org /cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/kernel/traps.c)你可以在kernel *命令行中用'user_debug = 0xff'啓動。 – 2013-03-28 14:27:15

回答

1

看起來像我已經解決了這個問題。

原因是EABI/OABI配置錯誤。感謝無聊的噪音! 我需要OABI配置。

此外,我真的不知道爲什麼,但它開始只在GCC 4.3.x上工作默認的gcc 4.7.x eabi/oabi的buildroot配置沒有效果。

Finnaly,我設置附加GCC選項:

--with-行軍=的ARMv5TE --with-CPU = ARM926EJ-S --with-mtune中= ARM926EJ-S --enable-multilib的 - disable-libssp --enable-languages = c,C++

+0

OABI已棄用,您應該真正使用EABI支持來構建您的內核,並構建您的所有用戶空間EABI。 – 2013-04-03 08:35:16