It’s a disassembler provided by GNU_Binutils. Very useful program to inspect object files in my opinion.

I was playing with objdump after compiling the below small assembly program with NASM. A simple program that calls a write system call from Linux x86 ABI to print “Hello, World”, or checkout this link

program.asm
section .data
    helloMessage: db 'Hello, World!', 0xA  ; Message to be printed
    helloLen: equ $-helloMessage          ; Length of the message
 
section .text
    global _start
 
_start:
    ; Write system call
    mov rax, 1          ; System call number for write
    mov rdi, 1          ; File descriptor 1 (STDOUT)
    mov rsi, helloMessage  ; Pointer to message
    mov rdx, helloLen   ; Message length
    syscall             ; Invoke system call
 
    ; Exit system call
    mov rax, 60         ; System call number for exit
    xor rdi, rdi        ; Exit code 0
    syscall             ; Invoke system call

You can compile and execute the program as given below

# create an object file
nasm -f elf64 program.asm -o program.o
 
# use linker to produce executable
ld program.o -o program
 
# execute
./program

You have to use -d option with objdump to see all assembler mnemonics, you can compare both program.o file before linking and after linking is applied you will notice only address information would change because linker calculates the address information to load the program in memory.

objdump -d program.o
objdump -d program