My general advice for beginners who want to get into reverse engineering is to read less books, and try to actually reverse engineer small and self contained programs. Reverse engineering has been my job for many years now, but it still very difficult for me to consume a long text talking about a reverse engineering project without touching the code on my own.
If you are interested in a hands-on experience, I recently made a self learning kit for learning reverse engineering for beginners. It is called ReversingHero. (https://www.reversinghero.com). It is one binary file made of 15 levels of increasing difficulty, teaching reverse engineering. It works in Linux environment, on the x64 series, and can also be completed using WSL (Windows subsystem for linux).
ReversingHero also contains an accompanying (paid) video solutions. The video solutions contain 12+ hours of step by step solutions to all the levels.
Otherwise, this looks very interesting :)
But right there on page 8, in the MIPS and ARM "functions that return a constant", is an example of "branch delay slots", which (a) I've never heard of, and (b) failure to grok them makes a two line function incomprehensible.
Fortunately, I like learning things.
Now that I think about it, ISA's/assembly are a really good example of how lots of tiny small things combined can become really hard to understand fast.
If you're looking for a very gentle introduction the Lena151 video tutorials are great:
They're a bit dated, but all the concepts are still relevant.
I wish we had all these great learning resources around when I was starting with W32Dasm + Hiew lol
I'm also curious - for those in the know - is the pursuit of knowledge regarding reverse engineering something that has proven valuable in a job or is it primarily an academic pursuit? If it has proven valuable, how so?
Ultimately reverse engineering is a hard and dry topic to learn. Different people learn in different ways. Try several different tutorials and learning resources before finding what works for you.
Reverse engineering has been invaluable for my career. It helps you understand the intricacies of modern systems, and makes it so you're never afraid to dive under the hood of something. You approach all software with a can-do attitude, because you know that no matter what, with enough effort you will be able to understand it and make it do what you want.
It has also opened up many interesting career paths for me in game anticheat, software exploitation, and tamper resistance. The jobs pay well and are very interesting :)
Heck yeah it is valuable. My area has numerous employers that are eager to hire people with that skill set. It pays more than the typical software development jobs. Most of the jobs seem to be related to how things get hacked into. One can play defense or offense.
I post about my employer in the "Who is hiring?" sometimes: https://news.ycombinator.com/item?id=21422735
I've seen people doing that stuff get yearly pay that is about the price of a house. That is good pay. I've seen stock given, and I've seen bonuses that seem nice, but it makes more sense to focus on pay. The pay is fine.
I started reversing when I started coding, which was back in the 80s. Back then it was just trying to get extra lives on home computer-games.
Later I wanted to install software, and that lead me to +fravia, and some of the associated challenges.
It's almost too hard to step back and imagine whether a true beginner would follow along, but I think with the right motivation and a lot of baby-steps along the way it is a field that will always draw some people, and they'll get there in the end due to sheer tenacity, regardless of the quality of documentation they come across.
It is also quite helpful in the embedded space where sometimes your only tool is a hex dump of memory.
Sometimes I think the entire IT sector is on the spectrum.
Wasn't intended as an insult. Pretty sure I'm on it myself on the mild side
I don't see the contradiction.
I think one of the greatest initial hurdles of being a good reverser is not being afraid to wade through large amounts of disassembly and being comfortable with not understanding whats going on for long periods of time.