I've tried learning reverse engineering before, but I found it overwhelming and wasn't able to make much progress. I'm interested in systems programming and would like to know whether it's a realistic path for me. What topics should I learn first, and which books, courses, or practical resources would you recommend? I know a little C already, but my experience is still limited.
3 Answers
Reverse engineering is usually a later step, not a beginner topic. It requires understanding how programs are built and run, including assembly, calling conventions, executable formats, operating-system APIs, and debuggers. Think of it like taking apart a machine: you need to understand the individual components before you can identify an unfamiliar one. Build small C programs first, inspect their assembly, and gradually learn tools such as gdb and objdump.
A structured hands-on course can help keep the learning process focused. The pwn.college material is useful for practicing Linux, memory safety, assembly, debugging, and binary exploitation, but make sure you understand the fundamentals rather than just completing exercises. Books like “The C Programming Language,” “Computer Systems: A Programmer’s Perspective,” and “Operating Systems: Three Easy Pieces” are also solid choices.
First, clarify what you mean by “systems programming.” It can include C and C++, operating systems, processes and threads, memory management, filesystems, networking, and low-level debugging. A good starting path is to become comfortable with C, pointers, arrays, structs, manual memory management, compilation, linking, and using a debugger on Linux.

I know a little C, but clearly need more practice. I’ll work through the fundamentals first instead of jumping straight into reverse engineering.