这个小东西看似不怎么复杂,但是也让花了我一段时间,弄清楚里面的一些规矩。
总结一下,有如下几点:
1、.method 作为方法的开始,.end method 作为方法的结束,一定要加上这一句,否则爆出来的错误根本不知道怎么解决,如图:
2、做smali文件的时候,文件名应该与文件中定义的类名一致。这个规则和java是一样的,java定义的public类的类名也必须和文件名一致。
3、生产的dex文件的文件名必须是classes.dex,否则,dalvik虚拟机将无法找到类,就是这个小东西让我花了一点时间,嘿嘿,还是被我研究出来了。
4、成功的运行出结果的图:
最后,总结一下编译smali文件并且运行的整个过程:
1、编写smali文件,比如hello.smali ,调试错误,注意上面提示的要点;
2、编译时候应用的语句
java -jar smali.jar -o classes.dex hello.smali
其中dex的名字必须是classes。接着会在当前目录下生成classes.dex。
无法找到smali.jar,就把他放在同一目录下。
3、把classes.dex 打包成zip ,按理任何压缩包形式都可以的,这里不做尝试了,压缩包的名字任取
4、把压缩包装入安卓虚拟机中:
adb push hello.zip /data/local/
5、在shell模式运行程序
adb shell dalvikvm -cp /data/local/hello.zip hello
就可以看到运行结果。
很快的就又看完了一章,尽管对里面众多的语法细节不是很熟悉,但是和intelx86上的汇编语言很类似,而且也了解到了许多底层的安卓原理,很是受启发。
为了将针对我的项目进行深入的研究,如何有效的hook安卓SDK。