Online tool for extracting information from C/C++ shared libraries (Linux/Android .so files) in ELF format and other object files.


Note: This tool is completely client-based and all processing is done on your device. That means your files are not transferred to the server.

If you you're an Android enthusiast that likes to learn more about Android internals, I highly recommend to check out my Bugjaeger app. It allows you to perform development/maintenance tasks directly from phone to phone. Tasks that you would normally perform from a development machine.

Extracting & Demangling C/C++ Function Names

This tool allows you to get symbol names from native C/C++ libraries. This should help you check which functions are defined and exported, or which functions need to be resolved by the linker from external dependencies.

If your library was compiled from C++ code, the function names are usually mangled. This means that the name is adjusted, so that it contains additional information, like namespace, class name, or argument data type. It can make the function harder to read. The tool allows you to display the demangled function names for libraries compiled with clang.

Checking Soname

Soname is a string inside of a native shared library that gives the library a name, which can be used by the linker to resolve library dependencies. The name can be equal to the filename, but it also can have a version suffix, which can be used to enforce backwards compatibility of libraries.

My elf tool allows you to find the soname of native shared libraries and also other meta information.

Finding Dependencies

Shared libraries often depend on other libraries, and these dependencies need to be loaded first.

With this tool you should be able to find dependencies which a library file requires before loading. It should allow you to fix issues with missing dependencies.

Symbol Types & Visibility

Symbols can be local or global (external). Only global symbols can be referenced outside of the given object file (shared lib). Local symbol can be created when you, for example, make your function static, compile with -fvisibility=hidden, or prepend function __attribute__((visibility("default"))). Local symbol type is marked with small letters. Global symbol is marked with capital letters.

Here are some common symbol types

U - Undefined symbol

w - undefined weak symbol (doesn't yield linking error when definition is missing during link process)

W - defined weak symbol (doesn't yield linking error when multiple symbols of the same name are defined; the "strong" symbol with same name will override the weak symbol)

T,t - code

R,r - read-only data (you've put const keyword in front of a variable)

B,b - uninitialized data (uninitialized global or static variables, or global/static variables initialized to zero)

D,d - writable data stored in data segment

See llvm-nm official docs for more information.

Strings Inside C/C++ Shared Library

Native C/C++ elf libraries are compiled into binary format. They still often contain various strings. This tool can help you when you're doing your research and reverse engineering of native C/C++ libraries by dumping the strings inside of these files.

Android APK Files

Android applications are installed from an APK file. The APK file is basically a zip archive with specific file structure.

Some Android applications also contain native C/C++ code (usually compiled using the NDK). The native code is loaded from shared linux libraries (.so) stored inside of the /lib folder inside of the APK archive.

You Want Other Features or Something Is Not Working

In case something wasn't working, or you would like to have some other features, send me an email
roman@sisik.eu.

I'll try to fix bugs and add requested features, if possible.

Useful links

If you want to get additional information about Android's APK files, check out my APK Analyzer tool.

If you you're an Android enthusiast or developer that likes to learn more about Android internals, I highly recommend to check out the Bugjaeger app. It allows you to connect 2 Android devices through USB OTG and perform many of the tasks that are normally only accessible from a developer machine via ADB directly from Android phone/tablet.

baseline_save_alt_72.png

Sixo Apps

If you're curios about the technical aspects of Android or you like image & video processing apps, you might find something interesting amongst the apps that I've published on Google Play