Skip to content

coreutils

dd

dd is a program that allows you to convert and copy a file.

It is most often used for low level operations on device files in a linux system.

Clarifying how the arguments work

Almost all arguments to dd are relative to the values of ibs/obs/bs.

All arguments except ibs/obs/bs are the number of "blocks", not the number of "bytes".

So when bs=4, then if count=4 then 16 bytes will be processed.

Reading arbitrary addresses / offsets with dd

Source

ifile=/dev/mem
offset=0x00010000
ofile=/tmp/data.bin
word_size=4
words=1
dd if="$ifile" of="$ofile" bs="$word_size" count="$words" skip="$((offset / word_size))" &> /dev/null \
    && rev "$ofile" \
        | xargs printf '%s\n'

Note

For little endian, you'd remove the rev command.

printf

printf format table

See man printf.3.

Or the wikipedia.

size_t and ssize_t

Use one of: %zd, %zu, %zx.

Warning

Microsoft compilers use different expressions.

Pointers

Source

Use %p.

Tip

If you are printing pointers to memory in the Linux Kernel, you may want to convert to unsigned long long instead (particularly for FPGA addresses):

printf("%llu", (unsigned long long)memory_ptr)

seq

Generate sequences in the shell.

Tip

In newer shells, like bash, you can use built in shell features to accomplish this.