tools / strings printable runssymbol tablesstreamed strings -n 4 ./app

Strings & Symbols

strings and readelf -s without a shell. Useful on a jump box with no binutils, and useful when the binary is something you would rather not copy onto a server.

Extractor streamed locally
Drop a binary here or click to choose a file — any file type, not just ELF

What strings actually does

The classic tool walks the file byte by byte and emits any run of at least four printable characters terminated by a non-printable byte. It is not parsing anything — no ELF structure is involved, so it works identically on a firmware image, a JPEG or a core dump. That is also its weakness: on a stripped Go or Rust binary you get enormous amounts of noise, and the useful signal (a build path, a hardcoded URL, an API hostname) is buried in it.

This implementation streams the file in 4 MiB chunks rather than reading it whole, so a multi-gigabyte core dump does not exhaust the tab's memory. Runs that straddle a chunk boundary are carried over instead of being silently truncated. The filter is applied as strings are found, not afterwards, which is what makes searching a large binary feel instant.

Symbol names are a different question

When you switch to symbol mode the tool takes a completely different path: it parses the ELF section headers, finds .symtab and .dynsym, and resolves names through the linked string table. This is the same data readelf -s prints, and unlike strings it tells you something structural: which symbols are exported (GLOBAL in .dynsym), which are local, and whether the binary was stripped at all.

A stripped release build has no .symtab, so symbol mode returns only the dynamic symbols — the ones the loader needs, typically a few dozen for an executable and a few thousand for a shared library. Absence of local symbols is normal and is not a sign of obfuscation; presence of no dynamic symbols on a dynamically linked executable is the unusual case worth investigating.

On trust. Extracting strings is a read-only operation and this tool never executes what you drop into it. That said, do not paste output containing credentials into a ticket or chat: build paths and environment strings in production binaries regularly leak database passwords and internal hostnames.