x86 Software Reverse-Engineering, Cracking, and Counter-Measures
by Stephanie Domas, Christopher Domas
Conclusion
Wow, this has been quite a journey! We've covered offense to defense; high-level languages down to assembly; registers, control flow, reverse engineering; patching, tools, techniques, and mindset. If you've made it this far, you have an amazing baseline of knowledge to build from as you continue to move forward.
And as you do move forward, you will always encounter something new. At first, it will be assembly instructions you don't know, then defenses you've never seen, then architectures you've never heard of, and of course the latest, greatest tool-of-the-day or defense-of-the-year. But now that you have the basics, you'll find that new things become easier and easier to pick up quickly.
Now that you know mov, you can easily understand the string version movs. You've worked with bit manipulations like not, so negation with neg makes sense pretty quickly. You've mastered comparisons like cmp, so cmps isn't much of a stretch, and from there how about cmpxchg or cmpxchg16b or lock cmpxchg8b? The gist is: now that you have the basics, it becomes increasingly easy to understand new instructions; whether it's ud (undefined instruction) or gf2p8affineinvqb (Galois field affine transformation inverse), the fundamentals tend to be mostly the same for everything.
But of course, learning more doesn't end there. New instructions are great, but if you keep on this path, you'll soon encounter entirely new architectures. The good news is, they also tend to follow the same basic ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access