<h3>Instructions and Data are located in separate areas within binaries</h3> >Currently I can get the offsets and assembly code, but not text strings alongside. Code and data are not intermingled but rather exist in separate sections in ABI-compliant binaries. Here is a <a href="https://en.wikipedia.org/wiki/Executable_and_Linkable_Format">diagram</a> of the how different sections are laid out in ELF binaries: [![ELF sections][1]][1] In other words, sections with instructions will not contain meaningful strings, only intstructions. This can be observed directly when the `-s` option for `objdump` is used when examining the `.text` section of the Linux `date` utility: $ objdump -sj .text /bin/date /bin/date: file format elf64-x86-64 Contents of section .text: 401af0 41574531 ff415645 31f64155 41544531 AWE1.AVE1.AUATE1 401b00 e45589fd 534889f3 4881ecd8 00000048 .U..SH..H......H 401b10 8b3ee8f9 530000be a1c84000 bf060000 .>..S.....@..... 401b20 00e8bafe ffffbe87 944000bf 61944000 [email protected].@. 401b30 e83bfcff ffbf6194 4000e811 fcffffbf .;....a.@....... 401b40 102c4000 e8877800 00c64424 0f0048c7 .,@...x...D$..H. < snip > In ELF binaries, the `.text` section holds the executable instructions of the program. The bytes the instructions are composed of are treated as ASCII, so there are meaningless sequences of characters being printed. <h3>Objdump will treat data as inctructions and disassemble accordingly</h3> `objdump` relies on an ELF binary's section headers to determine which sections of the binary contain code and which sections contain data. Only sections with instructions (`.text`, for example) should be disassembled using `objdump`.The `-D` argument to `objdump` will result in all sections of an ELF binary being disassembled, even non-code sections like `.data` and `.rodata`. From the manual page: >-D > --disassemble-all >Like -d, but disassemble the contents of all sections, not just those expected to contain instructions. This means that even if a section contained hardcoded strings (`.dynstr`, `.shstrtab`, `.rodata`, etc.) `objdump` would treat this data as instructions and dissasemble them accordingly. Here is an example using /bin/date: /bin/date: file format elf64-x86-64 Disassembly of section .rodata: 0000000000409400 <.rodata>: 409400: 01 00 add %eax,(%rax) 409402: 02 00 add (%rax),%al 409404: 74 69 je 40946f <__sprintf_chk@plt+0x798f> 409406: 6d insl (%dx),%es:(%rdi) 409407: 65 20 25 73 20 69 73 and %ah,%gs:0x73692073(%rip) # 73a9b481 <stderr+0x7348d131> 40940e: 20 6f 75 and %ch,0x75(%rdi) 409411: 74 20 je 409433 <__sprintf_chk@plt+0x7953> 409413: 6f outsl %ds:(%rsi),(%dx) 409414: 66 data16 409415: 20 72 61 and %dh,0x61(%rdx) 409418: 6e outsb %ds:(%rsi),(%dx) 409419: 67 65 00 0a add %cl,%gs:(%edx) 40941d: 52 push %rdx 40941e: 65 gs 40941f: 70 6f jo 409490 <__sprintf_chk@plt+0x79b0> < snip > It looks like there are instructions being disassembled, when in reality is data being treated as code: $ readelf -x .rodata /bin/date Hex dump of section '.rodata': 0x00409400 01000200 74696d65 20257320 6973206f ....time %s is o 0x00409410 7574206f 66207261 6e676500 0a526570 ut of range..Rep Furthermore, the arguments `-b binary` result in `objdump` treating the binary as a blob with a single section, obliterating any distinction between code and data within the binary, resulting in the entire contents of the binary being treated as code. Reference: the <a href="https://refspecs.linuxfoundation.org/elf/gabi41.pdf">System V ABI</a> section 4: "Object Files" [1]: https://i.sstatic.net/AQeSM.png