how are system calls in android OS executed and is it possible to monitor them?


I'm having some trouble understanding how system calls come into play in android app execution.

From my understanding of android app execution, .class file is translated into dalvik bytecode (DEX) which is combined together to form ODEX. ODEX is then compiled with JIT compiler directly into machine code for execution.

In this case, how does system call on android's linux kernel comes into play? In addition, is there any possible way to monitor these system calls?


Well, Java is a high-level language and when you open a file in Android it all-in-all calls fopen() using <a href="https://en.wikipedia.org/wiki/Java_Native_Interface" rel="nofollow">JNI</a>. So do every method which make any "system" stuff.

Yes you can monitor system calls in android but you need a rooted device and you'll need to replace system .so libs with your libs.


System calls are the functions of the kernel space, available to the user space. It gives the capacity to manipulate hard drive files or to control processes. It is available via the libc.so. All code (Java, native, whatever ...) that need to interact with the linux OS / Android OS will end up calling a syscall. Strace is a Linux utility for debugging processes. It can monitor system calls, signal deliveries and changes of process state. Strace use the ptrace system call to monitor another process memory and registers. For using it simply execute:

strace -p <package-name-pid>


  • Mocking Non-Standard Events in F# Foq
  • Configuring Ninject
  • inserting items in list in mongodb document
  • Getting errors while using neuralnet function
  • Zend Framework + Doctrine1.2 project structure with more modules
  • How to open multiple instances of a program in Linux
  • How do I change the kernel/python version for iPython?
  • Manually Timing out a C# Thread
  • triggering user space with kernel
  • Portable JRE on Linux - possible?
  • File extension of zlib zipped html page?
  • Custom preprocessing in caret
  • Graphics.CopyFromScreen [Web application] + The handle is invalid
  • ADO and msqli connections very slow
  • How to create a file in java without a extension
  • OpenGL ES texture problem, 4 duplicate columns and horizontal lines (Android)
  • javaw.exe and eclipse startup problems
  • HTML download movie download link
  • Cross-Platform Protobuf Serialization
  • Statically linking a C++ library to a C# process using CLI or any other way
  • How to make Safari send if-modified-since header?
  • Function pointer “assignment from incompatible pointer type” only when using vararg ellipsis
  • How to pass list parameters for each object using Spring MVC?
  • How to format a variable of double type
  • Acquiring multiple attributes from .xml file in c#
  • C# - Getting references of reference
  • CSS Applying specific rule for a specific monitor resolution with only CSS is posible?
  • -fvisibility=hidden not passed by compiler for Debug builds
  • coudnt use logback because of log4j
  • How to CLICK on IE download dialog box i.e.(Open, Save, Save As…)
  • Setting background image for body element in xhtml (for different monitors and resolutions)
  • Change div Background jquery
  • How does Linux kernel interrupt the application?
  • How can I remove ASP.NET Designer.cs files?
  • Are Kotlin's Float, Int etc optimised to built-in types in the JVM? [duplicate]
  • JaxB to read class hierarchy
  • Busy indicator not showing up in wpf window [duplicate]
  • Why do underscore prefixed variables exist?
  • java string with new operator and a literal