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
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 callYou 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
./programYou 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