如何在Android操作系统中执行系统调用,是否可以监控它们?

时间:2015-02-04 16:30:54

标签: android hook system call dalvik

我在理解系统调用如何在Android应用程序执行中发挥作用时遇到了一些麻烦。

根据我对android app执行的理解,.class文件被翻译成dalvik字节码(DEX),它被组合在一起形成ODEX。然后使用JIT编译器将ODEX直接编译为机器代码以供执行。

在这种情况下,android的linux内核上的系统调用如何发挥作用?另外,有没有办法监控这些系统调用?

2 个答案:

答案 0 :(得分:0)

嗯,Java是一种高级语言,当你在Android中打开一个文件时,它会使用JNI调用fopen()。所有制作任何"系统的方法都是如此。东西。

是的,您可以在Android中监控系统调用,但是您需要一个有根设备,并且您需要用您的库替换系统.so库。

答案 1 :(得分:0)

系统调用是内核空间的功能,可用于 用户空间。它提供了操作硬盘驱动器文件或控制进程的能力。它可以通过libc.so获得。需要与Linux OS / Android OS交互的所有代码(Java,本机,等等......)最终都会调用系统调用。 Strace是一个用于调试进程的Linux实用程序。它可以监控系统调用,信号传递和过程状态的变化。 Strace使用ptrace系统调用来监视另一个进程内存和寄存器。使用它只需执行:

strace -p <package-name-pid>