2008年11月21日星期五

Linux ARM SWI

这两天终于把那个在Linux下面的SWI搞定了。解决了不少问题。其中一个值得记下的就是一个关于code需要重定位。因为Hook Linux SWI,就需要有段code取代原始Linux的SWI Handler,跳转到自己的Handler然后重新派发,以区分linux系统调用的SWI号和自己的SWI号,自己的就要跳转到自己的Handler,Linux的则要跳转原始的Linux的Handler (vecotor_swi)。这个Handler的代码必须复制到0xC0000000以后的Kernel空间内,不然会有问题(系统死掉,因为handler通过insmod进去,但是模块的函数地址在0xbf000000开始),所以要把code复制到kmalloc的内存里面,同时要小心不能使用一些像LDR的伪指令,需要保证局部跳转不会混淆。其他的问题都是零碎的,也没什么可记录的。 另外遇到一些问题,但是可能和片子有关。

0 COMMENTS: