The best thing one can do when setting out on the journey to learn reverse engineering is to avoid the temptation of trying to understand every line of assembly. Instead, try and gain an intuition around common patterns in various dialects (ARM / x86 / MIPS / etc).<p>You can then abstract that understanding into macro-intuitions of control flow. When opening a black box binary in IDA for the first time, this allows you to think in terms of "X input results in control flow path Y which gives me access to function Z and - because of calling convention - register A to redirect execution to memory location M." Now you're in business and can worry about shellcode, ROP chains, whatever.<p>Just a couple of cents from the trenches.