Generated by GPT-5-mini| objdump | |
|---|---|
| Name | objdump |
| Developer | GNU Project, Binutils contributors |
| Released | 1989 |
| Latest release | ongoing |
| Operating system | Unix-like, Windows (via Cygwin, MinGW) |
| License | GNU Lesser General Public License |
objdump
objdump is a command-line program distributed with the GNU Binutils suite used for displaying information about object files, executables, shared libraries, and firmware images. It is widely used by systems programmers, reverse engineers, compiler developers, and devops engineers to inspect machine code, symbol tables, relocation records, debugging sections, and architecture-specific metadata. As part of the Free Software ecosystem, it interoperates with toolchains and debuggers from projects such as GNU Compiler Collection, LLVM, and GDB.
objdump was introduced as a component of the GNU Binutils project to offer a portable, extensible inspection tool for binary artifacts produced by assemblers and linkers. Its history intersects with projects and institutions like the GNU Project, Free Software Foundation, and major compiler infrastructures including GCC, Clang, and LLVM. The utility has been adapted by ports and distributions including Debian, Red Hat Enterprise Linux, Ubuntu, Fedora, and SUSE. objdump often complements debugging and profiling tools such as GDB, Valgrind, perf, and static analysis suites used in enterprise vendors like Intel Corporation, ARM Limited, and NVIDIA.
objdump provides multi-faceted inspection capabilities: disassembly of machine code, display of headers and sections, symbol table dumps, and annotation of relocation and debugging information. It supports presentation features relied upon by projects such as Binutils, GNU Make, Autoconf, and Automake in build and CI pipelines hosted by platforms like GitHub, GitLab, and Bitbucket. Typical functions include printing the program header table (used by ELF images on Linux), showing COFF/PE headers relevant to Microsoft Windows, and dumping architecture-specific ABI metadata relevant to vendors such as ARM Limited and MIPS Technologies. Developers working on operating systems like Linux kernel or embedded platforms such as FreeRTOS and Zephyr Project commonly incorporate objdump into toolchains.
The program accepts a variety of command-line flags for selecting output and target formats, often combined with compiler toolchain prefixes (e.g., i686-linux-gnu-objdump). Common options include flags to disassemble code, display file headers, and print symbol tables; these interact with assembler and linker artifacts produced by GNU Assembler, GNU Gold, and LLVM LLD. Integration patterns appear in continuous integration examples from organizations like Google, Amazon Web Services, and Microsoft where cross-compilation and multi-ABI builds require toolchain-specific invocations. Option semantics and edge cases are documented in manuals maintained by projects such as the GNU Project and exemplified in community knowledge bases like Stack Overflow and official distribution wikis.
objdump can emit disassembly in human-readable assembly syntax for ISAs such as x86 architecture, ARM architecture, RISC-V, MIPS architecture, and Power ISA. Output modes include raw hex dumps of sections, annotated disassembly with interleaved source line information when debug sections are present (DWARF data commonly generated by GCC and Clang), and formatted summaries of symbol visibility and linkage used in projects like glibc and musl libc. Example workflows are used by security researchers at institutions like CERT Coordination Center and vendors such as Cisco Systems to triage firmware. Community examples on forums and knowledge repositories frequently show objdump used alongside readelf, nm, and strings to assemble a comprehensive view of a binary.
objdump supports executable and object formats including ELF, COFF, and PE/PE32+ used across Unix-like systems, Windows, embedded RTOS images, and bare-metal firmware. Supported architectures span mainstream CPUs in servers and clients (x86-64, x86), mobile and embedded processors (ARM, AArch64), and RISC families (RISC-V, MIPS, PowerPC). Distribution and portability make it available on platforms managed by foundations and vendors such as The Linux Foundation, FreeBSD, NetBSD, OpenBSD, and through compatibility layers like Cygwin and MinGW-w64 on Microsoft Windows.
objdump is implemented in C within the GNU Binutils repository and interacts with canonical tools and libraries: the assembler (as), linker (ld), symbol utilities (nm), and section inspectors (readelf). Alternative and complementary projects include LLVM objdump (part of the LLVM project), commercial disassemblers like IDA Pro, open-source reverse engineering frameworks such as radare2 and Ghidra, and static instrumentation systems created by companies like Intel Corporation and ARM Limited. Toolchain maintainers at organizations like Red Hat, SUSE, and Canonical coordinate packaging and integration for distribution.
While objdump is a read-only analysis tool, misinterpretation of disassembly can lead to incorrect conclusions in vulnerability research conducted by groups such as OWASP and security teams at Google and Microsoft. Limitations include imperfect support for obfuscated binaries, packed executables used by threat actors analyzed by Mandiant and Kaspersky Lab, and reliance on correct architecture and endian settings for accurate decoding. For complex reverse engineering tasks, users often combine objdump with dynamic instrumentation tools like DTrace, Frida, and Valgrind and commercial debuggers from vendors such as Microsoft and Apple Inc. to corroborate static findings.