# llvm-strings - print strings

:::{program} llvm-strings
:::

## SYNOPSIS

{program}`llvm-strings` \[*options*\] \[*input...*\]

## DESCRIPTION

{program}`llvm-strings` is a tool intended as a drop-in replacement for GNU's
{program}`strings`, which looks for printable strings in files and writes them
to the standard output stream. A printable string is any sequence of four (by
default) or more printable ASCII characters. The end of the file, or any other
byte, terminates the current sequence.

{program}`llvm-strings` looks for strings in each `input` file specified.
Unlike GNU {program}`strings` it looks in the entire input file, regardless of
file format, rather than restricting the search to certain sections of object
files. If "`-`" is specified as an `input`, or no `input` is specified,
the program reads from the standard input stream.

## EXAMPLE

```console
$ cat input.txt
bars
foo
wibble blob
$ llvm-strings input.txt
bars
wibble blob
```

## OPTIONS

:::{option} --all, -a
Silently ignored. Present for GNU {program}`strings` compatibility.
:::

:::{option} --bytes=<length>, -n
Set the minimum number of printable ASCII characters required for a sequence of
bytes to be considered a string. The default value is 4.
:::

:::{option} --help, -h
Display a summary of command line options.
:::

:::{option} --print-file-name, -f
Display the name of the containing file before each string.

Example:

```console
$ llvm-strings --print-file-name test.o test.elf
test.o: _Z5hellov
test.o: some_bss
test.o: test.cpp
test.o: main
test.elf: test.cpp
test.elf: test2.cpp
test.elf: _Z5hellov
test.elf: main
test.elf: some_bss
```
:::

:::{option} --radix=<radix>, -t
Display the offset within the file of each string, before the string and using
the specified radix. Valid `<radix>` values are `o`, `d` and `x` for
octal, decimal and hexadecimal respectively.

Example:

```console
$ llvm-strings --radix=o test.o
    1054 _Z5hellov
    1066 .rela.text
    1101 .comment
    1112 some_bss
    1123 .bss
    1130 test.cpp
    1141 main
$ llvm-strings --radix=d test.o
    556 _Z5hellov
    566 .rela.text
    577 .comment
    586 some_bss
    595 .bss
    600 test.cpp
    609 main
$ llvm-strings -t x test.o
    22c _Z5hellov
    236 .rela.text
    241 .comment
    24a some_bss
    253 .bss
    258 test.cpp
    261 main
```
:::

:::{option} --version
Display the version of the {program}`llvm-strings` executable.
:::

:::{option} @<FILE>
Read command-line options from response file `<FILE>`.
:::

## EXIT STATUS

{program}`llvm-strings` exits with a non-zero exit code if there is an error.
Otherwise, it exits with code 0.

## BUGS

To report bugs, please visit \<<https://github.com/llvm/llvm-project/labels/tools:llvm-strings/>>.

