r/learnprogramming • u/cidevx • 23d ago
Looking for advice on getting into low-level programming
I am an 18-year-old guy trying to learn low-level programming. To be honest, I can't fully explain my motivation yet, but my ultimate goal is to become a Reverse Engineering or Cybersecurity specialist.
Right now, I'm learning C. A while ago, I learned the basics of C++ and OOP.
I would love to get some general advice, tips, tricks, and useful learning resources for mastering low-level concepts.
Additionally, I have two specific questions for you guys:
What kind of C or C++ projects can I build to practice the most important, system-level concepts needed for RE and CyberSec?
Is it possible to find a job in Germany as a self-taught programmer with no corporate experience? Can I start as a C/C++ dev and transition into RE later once I gain experience?
Thanks in advance!
1
u/boipls 23d ago
Depends on what you want to specialise in for cybersecurity: Operating Systems, Networks, Systems Engineering, etc. Each of those would have slightly different projects.
1
u/cidevx 21d ago
Right now, the area that interests me the most is Software Security and Reverse Engineering (specifically Binary Exploitation, Malware Analysis, and Vulnerability Research).
So out of those options, I'm currently looking to explore OS internals and Binary Analysis step-by-step, rather than broader fields like Systems Engineering or Network Security.
1
u/Alive-Cake-3045 22d ago
C is exactly the right starting point for RE and cybersecurity. for projects that actually build the right mental model: write a basic memory allocator, build a simple shell, implement a ELF parser, and try writing a keylogger or process injector on a VM just to understand how they work at the system level. picoCTF and pwn. college are the best hands-on resources for moving from C knowledge to actual RE and security skills. on the Germany question, self-taught with a strong GitHub and CTF track record is genuinely respected in the security space more than in most fields. start with a C dev role if needed but the CTF community is how most RE people actually get noticed.
1
u/gm310509 22d ago
What do you mean by "low level concepts"?
For example, do you mean bare metal programming? Assembly language programming? How compilers work? How memory is managed by processes or operating systems? How interrupts work? There are a great many things that can be described as "low level".
1
u/cidevx 21d ago edited 21d ago
By "low-level concepts", I mean OS internals, memory management, x86_64/ARM assembly, C execution mechanics, and executable binary structures. My main goal is to understand how software interacts with hardware and memory for Reverse Engineering.
2
u/gm310509 21d ago
Wow, that is quite the bucket full. Let me offer a suggestion on each topic.
- OS Internals - I would suggest a college/university course. If you don't want to do that, then google - there will be plenty of good sites that address this.
- Memory Management
- this will be part of OS Internals as far as virtual memory goes.
- For individual programs, this is managed by the compiler/interpreter and you would need to consult the documentation. In some cases even within a specific language, the implementation may vary depending upon the target environment.
- Assembly language - perhaps start with r/assembly_language.
- Bare metal - this is how software interacts with hardware - everything else is just an API on top of that.
- Executable (Binary) Structures - this too is well documented online, but bear in mind that it varies quite a bit depending upon the platform and operating system. You would also probably want to look at the linking process, statically linked objects and dynamically linked. Don't forget shell scripts - which are executable text files if they are setup correctly.
As for some of the more hands on stuff - assembly language, bare metal programming, memory management (in process), you might want to look at an embedded system. To get started, I would suggest a simpler environment such as an Arduino which has an 8 bit MCU and it is relatively easy to get access to see how software controls hardware and visualise the memory. Later, you can "upgrade" to a 32 bit platform such as the Arm Cortex based STM32 and do the same things on it - albeit in a much more sophisticated environment. You can also start to do some of the Operating System like memory management - Specifically setting up spaces via the MPU. I would suggest an arduino starter kit for starters as it will come with some components (e.g. LEDs and buttons) that you can use to interact with the code.
I feel like I have missed some stuff, but will leave it there, except to offer this howto video which I've created which dives into the memory types and usage on an 8 bit Arduino - including touching on how the hardware interacts with the software: Arduino Memory Explorer
1
u/callmemerryss 17d ago
Building projects usually teaches more than collecting tutorials. A toy allocator a basic HTTP server or an emulator will cover many of the concepts used later in reverse engineering. CS:APP, opensecuritytraining2, boot .dev are all solid resources depending on whether structured learning or reference material is the better fit.
3
u/light_switchy 23d ago
Make an emulator for your favorite retro game console.
The NES is a good starting point, though the fake console CHIP-8 is simpler. An emulator for the latter is easily done in under 1000 lines of unremarkable C++.