What is the difference between linear and control flow disassembly?
Most disassemblers, including objdump(1), implement what is known as linear or linear sweep disassembly: the algorithm starts disassembly at a given entry point, using the byte after a disassembled instruction as the start of the next instruction. This type of disassembly is fast and easy to implement, as there is no analysis of the instruction needed, and no danger of getting caught in an endless loop. Control-flow disassembly attempts to follow the flow of control in a program as it disassembles instructions. The algorithm starts disassembly at an entry point, then examines the instruction to see if it is a branch (call or conditional jump), a jump, or a return. Branch instructions and jump instructions examine the target operand and begin disassembly at that location. Once the disassembly of the target operand is complete, branch instructions will continue disassembly at the byte after the current instruction, while jump instructions will stop disassemby. Return instructions always